C#不明确调用 - 不同的返回类型
-
18-09-2019 - |
题
我有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;
}
如果没有共同的界面和你不希望创建一个新的,请你只改变名称:)
不隶属于 StackOverflow