編譯以下代碼將返回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)
{
}
編譯以下代碼將返回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)
{
}
Func((Class1)null);
演員null
的類型:
Func((Class1)null);
你應該能夠施展空到這類的,同樣的,你會可變Func((Class1)null)
。
你也可以使用一個變量:
Class1 x = null;
Func(x);
+1此方法比func((Class1)null)更容易閱讀和理解。投射null不直觀。 – wllmsaccnt 2010-10-28 15:06:06
這比在任何可能的情況下進行鑄造更爲可取,因爲它在編譯時捕獲了很多問題,否則會導致運行時拋出錯誤。 – hypehuman 2017-09-28 15:46:54
的Func()
方法接受一個引用類型作爲參數,可以爲null。由於您使用明確的null
值調用該方法,因此編譯器不知道您的null是否應該引用Class1
對象或Class2
對象。
你有兩個選擇:
演員空要麼在Class1
或Class2
類型,如Func((Class1)null)
或Func((Class2)null)
提供一個不接受任何參數Func()
方法的新的過載,並稱之爲超載當你沒有一個明確的對象引用:
void Func()
{
// call this when no object is available
}
使用as
爲鑄件使它稍微READA具有相同的功能。
Func(null as Class1);
哦,對不起,看起來我可以:) – Poma 2010-10-28 14:59:03