2

我有 2 个将 MongoDB 文档转换为实体/对象的扩展方法。

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

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

这给出了预期的模棱两可的调用错误,所以我想知道如何解决这个问题?

友好的问候,

泡菜

4

4 回答 4

9

您可以使您的Convert方法通用:

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

然后像这样使用它:

var document = new Document();
var temp = document.ConvertTo<ProductTemplate>(); // returns a ProductTemplate
var prod = document.ConvertTo<Product>(); // returns a Product
于 2010-02-05T11:40:18.890 回答
7

返回类型不能重载函数。您将不得不将您的函数重命名为:

ConvertToProductTemplate() 和 ConvertToProduct()

或者将它们变成一个返回公共基类或接口的函数。(但是当他们得到你的结果时,调用者将不得不做一个演员)

于 2010-02-05T11:37:57.010 回答
3

您可以更改名称:

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

public static Product ConvertToProduct(this Document document)
{
    return null;
}
于 2010-02-05T11:37:00.000 回答
1

我感觉ProductProductTemplate类在某种程度上是相关的(例如Product extends ProductTemplate)。如果我是对的,您可以只返回基类(在本例中为ProductTemplate)。

Tomas Lycken 建议使用泛型方法,在我看来这是一个不错的主意,但如果 Product 和 productTemplate 有一个通用接口,您也可以返回该接口而不是ProductProductTemplate

示例(由 Tomas Lycken 撰写):

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

示例(由我):

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

如果没有通用接口并且您不想创建新接口,请更改名称 :)

于 2010-02-05T12:37:45.447 回答