我有2种,其将一个MongoDB的文件的实体/对象扩展方法。

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

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

这给出了一个模棱两可的预期呼叫错误,所以我想知道我怎么能解决这个问题?

友好的问候,

Pickels

有帮助吗?

解决方案

函数不能返回类型被重载。你将不得不重命名功能可能:

ConvertToProductTemplate() 和 ConvertToProduct()

或将它们变成它返回一个共同的基类或接口一个功能。 (但随后调用者将不得不做铸造,当他们得到你的结果)

其他提示

您可以让您的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

您可以更改名称:

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

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

我有的感觉产品和<强> ProductTemplate 类以某种方式相关的(例如<强>产品延伸的 ProductTemplate )。如果我是正确的,你可以只返回基类( ProductTemplate 在这种情况下)。

托马斯Lycken建议使用泛型方法,这在我看来是相当不错的主意,但如果有产品和productTemplate一个通用的接口,你可以返回接口以及代替的产品并的 ProductTemplate

实施例(由Tomas Lycken):

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

实施例(由我):

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

如果没有共同的界面和你不希望创建一个新的,请你只改变名称:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top