C # Überladen mit Generics: Fehler oder Feature?

8

Nehmen wir ein vereinfachtes Beispiel:

%Vor%

Compiler sagt:

  

Der Typ 'System.Collections.Generic.IEnumerable' kann nicht als Typparameter 'C' im generischen Typ oder in der Methode 'UserQuery.Foo (C, T)' verwendet werden. Es gibt keine implizite Referenzkonvertierung von 'System.Collections.Generic.IEnumerable' zu 'System.Collections.Generic.ICollection'.

Wenn ich Main zu:

ändere %Vor%

Es wird gut funktionieren. Warum wählt der Compiler nicht die richtige Überladung?

    
TN. 06.04.2010, 16:52
quelle

2 Antworten

15

Ihre Frage wird hier beantwortet.

Ссылка

Bitte lesen Sie auch die ungefähr eine Million Kommentare, die mir sagen, dass ich falsch liege, wenn ich einen interessanten zusätzlichen Kommentar zu diesem Thema anführe.

    
Eric Lippert 06.04.2010, 16:58
quelle
2

Ich vermute, dass der Compiler die beste Übereinstimmung wählt, bevor er die generische Einschränkung verwendet. In Ihrem Beispiel ist die Methode mit der Einschränkung vorzuziehen, da sie keinen Parameter params last hat.

Bearbeiten - Eric Lippert bestätigt dies in seiner Antwort.

    
Ben Lings 06.04.2010 16:59
quelle