簡體   English   中英

C#不明確的調用 - 不同的返回類型

[英]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;
}

我有一種感覺, ProductProductTemplate類以某種方式相關(例如Product extends ProductTemplate )。 如果我是對的,你可以返回基類(在本例中為ProductTemplate )。

Tomas Lycken建議使用泛型方法,這在我看來是個好主意,但是如果有一個Product和productTemplate的通用接口,你也可以返回該接口而不是ProductProductTemplate

示例(由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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM