[英]C# Ambiguous calls - Different return type
我有2個擴展方法將MongoDB文檔轉換為實體/對象。
public static ProductTemplate Convert(this Document document)
{
return null;
}
public static Product Convert(this Document document)
{
return null;
}
這給出了一個預期的模糊調用錯誤,所以我想知道如何解決這個問題?
友好的問候,
Pickels
你可以使你的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;
}
如果沒有通用界面而您不想創建新界面,請更改名稱:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.