How to resolve ambiguity when argument is null?

那年仲夏 提交于 2019-11-30 00:21:20

问题


Compiling the following code will return The call is ambiguous between the following methods or properties error. How to resolve it since I can't explicitly convert null to any of those classes?

static void Main(string[] args)
{
    Func(null);
}

void Func(Class1 a)
{

}

void Func(Class2 b)
{

}

回答1:


Func((Class1)null);



回答2:


You could also use a variable:

Class1 x = null;
Func(x);



回答3:


Cast null to the type:

Func((Class1)null);



回答4:


Using as for the casting makes it slightly more readable with the same functionality.

Func(null as Class1);



回答5:


The Func() methods accept a reference type as a parameter, which can be null. Since you're calling the method with an explicit null value, the compiler doesn't know whether your null is supposed to be in reference to a Class1 object or a Class2 object.

You have two options:

Cast the null to either the Class1 or Class2 type, as in Func((Class1)null) or Func((Class2)null)

Provide a new overload of the Func() method that accepts no parameters, and call that overload when you don't have an explicit object reference:

void Func()
{
    // call this when no object is available
}



回答6:


You should be able to cast null to either of those, the same as you would a variable Func((Class1)null).




回答7:


Just an alternative solution I prefer

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


来源:https://stackoverflow.com/questions/4044055/how-to-resolve-ambiguity-when-argument-is-null

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!