2010-10-28 16 views
19

Al compilar el siguiente código, se devuelve The call is ambiguous between the following methods or properties error. ¿Cómo resolverlo ya que no puedo convertir explícitamente null a ninguna de esas clases?¿Cómo resolver la ambigüedad cuando el argumento es nulo?

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

void Func(Class1 a) 
{ 

} 

void Func(Class2 b) 
{ 

} 
+1

oh, lo siento, parece que puede :) – Poma

Respuesta

24
Func((Class1)null); 
10

moldeada null al tipo:

Func((Class1)null); 
3

Usted debe ser capaz de lanzar nula a cualquiera de ellos, al igual que lo haría con una variable Func((Class1)null).

8

También es posible usar una variable:

Class1 x = null; 
Func(x); 
+2

1 Este método es más fácil de leer y comprender que func ((Clase 1) null). Casting null no es intuitivo. – wllmsaccnt

+0

Esto es preferible a la conversión siempre que sea posible, ya que atrapa muchos problemas en tiempo de compilación que, de lo contrario, serían errores de lanzamiento en tiempo de ejecución. – hypehuman

4

Los Func() métodos aceptar un tipo de referencia como un parámetro, que puede ser nulo. Dado que está llamando al método con un valor explícito null, el compilador no sabe si se supone que su nulo es en referencia a un objeto Class1 o un objeto Class2.

tiene dos opciones:

emitir el nulo ya sea del tipo Class1 o Class2, como en Func((Class1)null) o Func((Class2)null)

proporcionar una nueva sobrecarga del método Func() que no acepta parámetros, y llaman a que la sobrecarga cuando usted no tiene una referencia de objeto explícito:

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

Usando as para la fundición hace que sea un poco más Reada ble con la misma funcionalidad.

Func(null as Class1); 
Cuestiones relacionadas