ich einige Probleme, zu verstehen, warum die folgenden Ausschnitt geben Sie mir keinen Fehlergenerische Einschränkung für die Aktion funktioniert nicht wie erwartet
public void SomeMethod<T>(T arg) where T : MyInterface
{
MyInterface e = arg;
}
Aber dieses, was ich erwarten würde aufgrund der generischen Arbeit Typeinschränkung
private readonly IList<Action<MyInterface>> myActionList = new List<Action<MyInterface>>();
public IDisposable Subscribe<T>(Action<T> callback) where T: MyInterface
{
myActionList.Add(callback); // doesn't compile
return null
}
gibt diesen Fehler
cannot convert from 'System.Action<T>' to 'System.Action<MyInterface>'
ich bin mit VS2012 SP1 und .NET 4.5.
Kann jemand erklären, warum die Beschränkung es nicht erlaubt zu kompilieren?
Warum ist Ihre Liste readonly, und warum 'neue IList'? Ist das die eigentliche Erklärung? –
Klassen und Delegierte sind nicht dasselbe. 'System.Action' stellt eine Funktion mit einem einzelnen Parameter vom Typ 'MyInterface' dar, während 'System.Action ' eine Methode mit einem Parameter vom Typ 'T: MyInterface' darstellt. Die Funktionssignaturen sind nicht kompatibel, es ist nicht relevant, dass "T" eine Ableitung von "MyInterface" ist, die Signatur wäre nur kompatibel, wenn "T" genau "MyInterface" wäre. –
@PaoloTedesco Entschuldigung, es ist rekonstruiert und vereinfacht von einem anderen Code. Kopieren/Einfügen Fehler –