這似乎很奇怪,除非我失去了一些東西......重寫擴展方法需要組裝參考
public static string ToDomainSolarSystemCelestial(this TypeMapper<string> m)
{
// Does not reference any other assemblies - straight string to string mapping.
return m.Source
}
public static Universe.SolarSystemCelestial ToDomainSolarSystemCelestial(this TypeMapper<Db.SolarSystemCelestial> m)
{
// Maps between a database and business object.
// Requires a reference to the Db assembly.
return new Universe.SolarSystemCelestial()
{
Id = m.Source.Id,
// etc
}
}
的這兩種擴展方法是在同一個類中定義。第二個覆蓋需要知道Db.SolarSystemCelestial是什麼,所以它需要對包含程序集的引用。然而,第一個是字符串到字符串的直接映射。
但如果我這樣做...
var x = Mapper.Map("x").ToDomainSolarSystemCelestial();
使用沒有依賴過載
..,Visual Studio將以下消息抱怨:
The type Db.SolarSystemCelestial is not defined in an assembly that is referenced. You must add a reference to assembly Db, Version 1.0.0.0...
如果我改變問題消失的方法之一的名稱。除了更改名稱之外,是否有解決此問題的方法?理想情況下,我希望覆蓋具有相同的名稱,但處理不同的類型。
謝謝。
注意:有關於查找未引用的程序集的問題,但在這種情況下,我詢問的是擴展方法的編譯,而不僅僅是缺少的程序集引用。
編譯器需要確定要使用哪個重載,所以它需要引用任何重載的簽名中使用的任何類型。 – dbugger 2015-02-10 21:18:32
更改方法的名稱不能解決此問題。該錯誤是關於缺少的參考。 – 2015-02-10 21:18:57
如果要編譯代碼,請添加對引用的外部程序集的引用。 – 2015-02-10 21:20:14