问题
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