Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 参数为空时如何解决歧义?_C#_Null_Ambiguous Call - Fatal编程技术网

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;
}