编译以下代码将返回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);
您还可以使用变量:
Class1 x = null;
Func(x);
转换null
为类型:
Func((Class1)null);
使用as
铸件使其具有相同功能的可读性略高。
Func(null as Class1);
这些Func()
方法接受引用类型作为参数,该参数可以为空。由于您使用显式null
值调用该方法,因此编译器不知道您的 null 是否应该引用Class1
对象或Class2
对象。
你有两个选择:
将 null 转换为Class1
orClass2
类型,如Func((Class1)null)
orFunc((Class2)null)
提供Func()
不接受参数的方法的新重载,并在没有显式对象引用时调用该重载:
void Func()
{
// call this when no object is available
}
您应该能够将 null 转换为其中任何一个,就像您对 variable 一样Func((Class1)null)
。
只是我更喜欢的替代解决方案
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;
}