如果参数为null,如何解决歧义?

时间:2010-10-28 14:52:33

标签: c# null ambiguous-call

编译以下代码将返回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)
{

}

7 个答案:

答案 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转换为Class1Class2类型,如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;
}