2013-10-24 92 views
2

我有兩個擴展方法,這樣的..我們不能有不同類的擴展方法同名嗎?

一個是

public static BsonValue TopOne(this IEnumerable<BsonValue> IEnumBv) 
    { 

    } 

第二個是

public static BsonValue TopOne(this BsonValue IEnumBv) 
{ 

} 

這是不可能的?我沒有理由。

即使名稱相同,但它對於不同的擴展方法是正確的嗎?

或者如何做到這一點?我需要兩個擴展名的topone名稱。是否有可能?

UPDATE

我收到此錯誤

的調用以下方法或屬性之間曖昧: 'BsonExtensionLibrary.MongoExtensions.TopOne(MongoDB.Bson.BsonValue)' 和「BsonExtensionLibrary .MongoExtensions.TopOne(System.Collections.Generic.IEnumerable)

+1

什麼問題你面對?你有沒有試過編譯你的代碼? –

+0

是啊,它沒有編譯..它說名稱是兩者之間ambigous。 – shanmugharaj

+0

對不起它的拼寫錯誤yaar .. IEnumerable罰款.. – shanmugharaj

回答

8

你可以絕對做到這一點 - 但如果你試圖調用exten sion方法,它既是BsonValueIEnumerable<BsonValue>。例如:

BsonArray array = ...; 
BsonValue top = array.TopValue(); 

您希望調用哪種方法?兩者都適用,兩種轉換都不如其他。

請注意,這與擴展方法真的沒有關係 - 它只是重載解析。你會面對完全一樣的問題,如果這些是正常的靜態方法,和你有:

BsonArray array = ...; 
BsonValue top = BsonHelpers.TopValue(array); 

要麼給這兩種方法不同的名字,或找到表達的一些方法你想要什麼,例如

BsonArray array = ...; 
BsonValue topAsEnumerable = array.AsEnumerable().TopValue(); 
BsonValue topAsValue = ((BsonValue) array).TopValue(); 

(這是使用Enumerable.AsEnumerable擴展方法只是表達式類型轉換爲IEnumerable<BsonValue>。)

+0

哦,得到它man.Yes是正確的。謝謝。 – shanmugharaj

相關問題