25

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

}
4

7 回答 7

38
Func((Class1)null);
于 2010-10-28T14:55:15.373 回答
12

您还可以使用变量:

Class1 x = null;
Func(x);
于 2010-10-28T15:00:15.770 回答
11

转换null为类型:

Func((Class1)null);
于 2010-10-28T14:54:36.880 回答
9

使用as铸件使其具有相同功能的可读性略高。

Func(null as Class1);
于 2011-07-26T20:30:47.253 回答
4

这些Func()方法接受引用类型作为参数,该参数可以为空。由于您使用显式null值调用该方法,因此编译器不知道您的 null 是否应该引用Class1对象或Class2对象。

你有两个选择:

将 null 转换为Class1orClass2类型,如Func((Class1)null)orFunc((Class2)null)

提供Func()不接受参数的方法的新重载,并在没有显式对象引用时调用该重载:

void Func()
{
    // call this when no object is available
}
于 2010-10-28T15:01:30.440 回答
3

您应该能够将 null 转换为其中任何一个,就像您对 variable 一样Func((Class1)null)

于 2010-10-28T14:55:48.847 回答
1

只是我更喜欢的替代解决方案

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;
}
于 2018-10-20T12:12:16.923 回答