我有2个将MongoDB文档转换为实体/对象的扩展方法。
public static ProductTemplate Convert(this Document document)
{
return null;
}
public static Product Convert(this Document document)
{
return null;
}
这给出了一个预期的模糊调用错误,所以我想知道如何解决这个问题?
友好的问候,
Pickels
答案 0 :(得分: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
答案 1 :(得分:7)
返回类型不能重载函数。您必须将您的功能重命名为:
ConvertToProductTemplate() 和 ConvertToProduct()
或将它们转换为一个返回公共基类或接口的函数。 (但是当调用者得到结果时,他们必须进行演员表)
答案 2 :(得分:3)
您可以更改名称:
public static ProductTemplate ConvertToProductTemplate(this Document document)
{
return null;
}
public static Product ConvertToProduct(this Document document)
{
return null;
}
答案 3 :(得分:1)
我感觉产品和 ProductTemplate 类以某种方式相关(例如产品扩展 ProductTemplate )。如果我是对的,你可以返回基类(在这种情况下是 ProductTemplate )。
Tomas Lycken建议使用泛型方法,这在我看来是个好主意,但如果有一个通用的Product和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;
}
如果没有通用界面且您不想创建新界面,请更改名称:)