编译以下代码将返回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)
{
}
答案 0 :(得分:33)
Func((Class1)null);
答案 1 :(得分:11)
将null
投射到类型:
Func((Class1)null);
答案 2 :(得分:11)
您还可以使用变量:
Class1 x = null;
Func(x);
答案 3 :(得分:6)
使用as
进行投射会使其具有相同功能的可读性。
Func(null as Class1);
答案 4 :(得分:4)
Func()
方法接受引用类型作为参数,该参数可以为null。由于您使用显式null
值调用该方法,因此编译器不知道您的null是否应该引用Class1
对象或Class2
对象。 / p>
您有两种选择:
将null转换为Class1
或Class2
类型,如Func((Class1)null)
或Func((Class2)null)
提供不接受任何参数的Func()
方法的新重载,并在没有显式对象引用时调用该重载:
void Func()
{
// call this when no object is available
}
答案 5 :(得分:3)
您应该能够将null转换为其中任何一个,与变量Func((Class1)null)
相同。
答案 6 :(得分:0)
我更喜欢另一种解决方案
static void Main(string[] args)
{
Func(Class1.NULL);
}
void Func(Class1 a)
{ }
void Func(Class2 b)
{ }
class Class1
{
public static readonly Class1 NULL = null;
}
class Class2
{
public static readonly Class2 NULL = null;
}