25

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)
{

}
Poma
  • 8,266
  • 17
  • 69
  • 142

7 Answers7

38
Func((Class1)null);
moi_meme
  • 8,748
  • 4
  • 45
  • 61
12

You could also use a variable:

Class1 x = null;
Func(x);
Dismissile
  • 31,646
  • 36
  • 169
  • 255
  • 2
    +1 This method is easier to read and understand than func((Class1)null). Casting null is not intuitive. – wllmsaccnt Oct 28 '10 at 15:06
  • This is preferable to casting wherever possible, as it catches many problems at compile time that would otherwise be runtime cast errors. – hypehuman Sep 28 '17 at 15:46
11

Cast null to the type:

Func((Class1)null);
Pieter van Ginkel
  • 28,744
  • 8
  • 70
  • 108
9

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

Func(null as Class1);
ShawnFeatherly
  • 2,100
  • 22
  • 19
4

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
}
JeffFerguson
  • 2,872
  • 18
  • 28
3

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

Dave D
  • 7,908
  • 4
  • 36
  • 45
1

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;
}
vikingfabian
  • 305
  • 2
  • 5