Pergunta

Eu tenho 2 métodos de extensão que converter um documento MongoDB a uma entidade / objeto.

public static ProductTemplate Convert(this Document document)
{
    return null;
}

public static Product Convert(this Document document)
{
    return null;
}

Isto dá um erro chamada ambígua esperado então eu queria saber como eu poderia corrigir isso?

saudações amigas,

Pickels

Foi útil?

Solução

As funções podem não ser sobrecarregado por tipo de retorno. Você terá que renomear suas funções para talvez:

ConvertToProductTemplate () e ConvertToProduct ()

ou transformá-los em uma função que retorna uma classe base comum ou interface. (Mas, em seguida, o chamador terá que fazer um elenco quando eles obter o resultado)

Outras dicas

Você poderia fazer o seu método Convert genérico:

public static T ConvertTo<T>(this Document doc) where T : SomeBaseClassOrInterface
{
    return null;
}

Em seguida, usá-lo assim:

var document = new Document();
var temp = document.ConvertTo<ProductTemplate>(); // returns a ProductTemplate
var prod = document.ConvertTo<Product>(); // returns a Product

Você pode mudar os nomes:

public static ProductTemplate ConvertToProductTemplate(this Document document) 
{
    return null;
}

public static Product ConvertToProduct(this Document document)
{
    return null;
}

Eu tenho um sentimento de que produtos e ProductTemplate aulas estão relacionados de alguma forma (por exemplo, produtos se estende ProductTemplate ). Se eu estiver certo, você pode simplesmente voltar a classe base ( ProductTemplate , neste caso).

Tomas Lycken sugerido o uso de método genérico, que na minha opinião é muito boa idéia, mas se há uma interface comum para o produto e productTemplate, você pode simplesmente voltar a interface bem em vez de produtos e ProductTemplate .

Exemplo (por Tomas Lycken):

public static T ConvertTo<T>(this Document doc) where T : SomeBaseClassOrInterface
{
    return null;
}

Exemplo (por mim):

public static SomeBaseClassOrInterface ConvertTo(this Document doc)
{
    return null;
}

E se não há nenhuma interface comum e você não quiser criar um novo, por favor, basta mudar os nomes:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top