Overloading null ambiguity

c#, methods, overloading

Solution

The problem is that both `string` and `object` are nullable, so `null` could refer to either overload of the method. You have to cast the null value—as stupid as that sounds—to say explicitely which overload you want to call.

method("string", (string) null);
method("string", (object) null);

This is basically the same as if you defined a variable of either type and passed that then:

string param1 = null;
object param2 = null;

method("string", param1); // will call the string overload
method("string", param2); // will call the object overload

Both `param1` and `param2` have the same value, `null`, but the variables are of different types which is why the compiler is able to tell exactly which overload it needs to use. The solution above with the explicit cast is just the same; it annotates a type to the `null` value which is then used to infer the correct overload—just without having to declare a variable.

Problem

I have the following methods: ``` void Method(string param1, string param2); void Method(string param1, object param2); ``` When I call the method using the following: ``` method("string", null); ``` It gives me an error because the call is ambiguous, the compiler does not know which version to call, because both methods accept `null` as the second parameter. How do I overcome this without changing the method name in one of them? the first method will never have `null`.

Original source

Related problems