我有 2 个将 MongoDB 文档转换为实体/对象的扩展方法。
public static ProductTemplate Convert(this Document document)
{
return null;
}
public static Product Convert(this Document document)
{
return null;
}
这给出了预期的模棱两可的调用错误,所以我想知道如何解决这个问题?
友好的问候,
泡菜
我有 2 个将 MongoDB 文档转换为实体/对象的扩展方法。
public static ProductTemplate Convert(this Document document)
{
return null;
}
public static Product Convert(this Document document)
{
return null;
}
这给出了预期的模棱两可的调用错误,所以我想知道如何解决这个问题?
友好的问候,
泡菜
您可以使您的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
返回类型不能重载函数。您将不得不将您的函数重命名为:
ConvertToProductTemplate() 和 ConvertToProduct()
或者将它们变成一个返回公共基类或接口的函数。(但是当他们得到你的结果时,调用者将不得不做一个演员)
您可以更改名称:
public static ProductTemplate ConvertToProductTemplate(this Document document)
{
return null;
}
public static Product ConvertToProduct(this Document document)
{
return null;
}
我感觉Product和ProductTemplate类在某种程度上是相关的(例如Product extends ProductTemplate)。如果我是对的,您可以只返回基类(在本例中为ProductTemplate)。
Tomas Lycken 建议使用泛型方法,在我看来这是一个不错的主意,但如果 Product 和 productTemplate 有一个通用接口,您也可以返回该接口而不是Product和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;
}
如果没有通用接口并且您不想创建新接口,请更改名称 :)