2013-03-04 4 views
1

J'ai eu cette question dans une interview, maintenant je sais que j'ai donné une mauvaise réponse. Pourquoi ce programme affiche-t-il un appel ambigu entre les fonctions et ne compile donc pas?appel ambigu entre les fonctions erreur

public static void Display(int? num) { 
    Console.WriteLine(num); 
} 

public static void Display(string num) { 
    Console.WriteLine(num); 
} 

static void Main() { 
    Display(1); 
    Display("1"); 
    Display(null); 

    Console.ReadLine(); 
} 

Répondre

7

Cette déclaration Display(null); peut être interprété comme Display(nullable int with null value) ou Display(string with null value). D'où l'erreur d'appel ambiguë.

+6

Afin de donner cette erreur non seulement il doit y avoir plusieurs méthodes applicables, il doit aussi y avoir * pas de meilleure méthode *. Depuis ni int? ni chaîne est clairement "mieux" que l'autre, les méthodes sont ambiguës. S'il s'agissait à la place d'un objet et d'une chaîne, alors la chaîne serait meilleure car elle est plus spécifique que l'objet. –

Questions connexes