Ich lerne C# Generika und mache Dummy-Code zu Testzwecken. Also teste ich die in Generic Modifier, die angibt, dass der Typparameter kontravariant ist.Verwenden von generischen Kontravarianten mit IList und IEnumerable
Angesichts der unter Schnittstelle:
[CS1961] Ungültige Varianz:
public interface IInterfaceTest<in T> { void Method(T value); void Method(IList<T> values); void Method(IEnumerable<T> values); }
Beim Kompilieren, ich die Fehlermeldung bekommen Der Typ-Parameter 'T' invariant sein müssen gültige auf 'IInterfaceTest.Method (IList)'. "T" ist kontravariant.
Der Fehler bezieht sich nur auf die Zeile void Method(IEnumerable<T> values)
. Wenn diese Zeile entfernt wird, funktioniert alles einwandfrei.
Also meine Frage ist: Warum kann ich die generische kontra mit IEnumerable
verwenden, aber nicht mit IList
? Habe ich etwas vergessen?
Danke.
'IList' ist nicht und kann nicht kovariant sein. –
SLaks
@SLaks: Ich denke OP bekommt das, aber warum? (Das wird mir auch helfen) – Stefan
Weil es veränderbar ist. https://stackoverflow.com/a/2033921/34397 – SLaks