C# 参数为空时如何解决歧义?
编译以下代码将返回C# 参数为空时如何解决歧义?,c#,null,ambiguous-call,C#,Null,Ambiguous Call,编译以下代码将返回以下方法或属性之间的调用不明确错误。由于我不能显式地将null转换为这些类中的任何一个,如何解决它 static void Main(string[] args) { Func(null); } void Func(Class1 a) { } void Func(Class2 b) { } 将null强制转换为类型: Func((Class1)null); 您应该能够将null强制转换为这两个变量中的任何一个,就像您可以使用变量Func((Class1)nu
以下方法或属性之间的调用不明确
错误。由于我不能显式地将null
转换为这些类中的任何一个,如何解决它
static void Main(string[] args)
{
Func(null);
}
void Func(Class1 a)
{
}
void Func(Class2 b)
{
}
将
null
强制转换为类型:
Func((Class1)null);
您应该能够将null强制转换为这两个变量中的任何一个,就像您可以使用变量
Func((Class1)null)
您还可以使用变量:
Class1 x = null;
Func(x);
Func()
方法接受引用类型作为参数,该参数可以为null。由于使用显式的null
值调用该方法,编译器不知道null应该引用Class1
对象还是Class2
对象
您有两个选择:
将null强制转换为Class1
或Class2
类型,如Func((Class1)null)
或Func((Class2)null)
提供不接受任何参数的Func()
方法的新重载,并在没有显式对象引用时调用该重载:
void Func()
{
// call this when no object is available
}
将
用作
进行转换可以使其在具有相同功能的情况下更具可读性
Func(null as Class1);
只是一个我更喜欢的替代方案
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;
}
哦,对不起,看起来我可以:)+1这个方法比func((Class1)null)更容易阅读和理解。强制转换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;
}