2010-10-28 29 views
19

編譯以下代碼將返回The call is ambiguous between the following methods or properties錯誤。如何解決它,因爲我不能明確地將null轉換爲任何這些類?如何解決參數爲空時的歧義?

static void Main(string[] args) 
{ 
    Func(null); 
} 

void Func(Class1 a) 
{ 

} 

void Func(Class2 b) 
{ 

} 
+1

哦,對不起,看起來我可以:) – Poma 2010-10-28 14:59:03

回答

24
Func((Class1)null); 
10

演員null的類型:

Func((Class1)null); 
3

你應該能夠施展空到這類的,同樣的,你會可變Func((Class1)null)

8

你也可以使用一個變量:

Class1 x = null; 
Func(x); 
+2

+1此方法比func((Class1)null)更容易閱讀和理解。投射null不直觀。 – wllmsaccnt 2010-10-28 15:06:06

+0

這比在任何可能的情況下進行鑄造更爲可取,因爲它在編譯時捕獲了很多問題,否則會導致運行時拋出錯誤。 – hypehuman 2017-09-28 15:46:54

4

Func()方法接受一個引用類型作爲參數,可以爲null。由於您使用明確的null值調用該方法,因此編譯器不知道您的null是否應該引用Class1對象或Class2對象。

你有兩個選擇:

演員空要麼在Class1Class2類型,如Func((Class1)null)Func((Class2)null)

提供一個不接受任何參數Func()方法的新的過載,並稱之爲超載當你沒有一個明確的對象引用:

void Func() 
{ 
    // call this when no object is available 
} 
5

使用as爲鑄件使它稍微READA具有相同的功能。

Func(null as Class1);