Versuch, einen Stream in List<T>
(oder einen anderen Typ) zu deserialisieren und den Fehler zu beheben:
Die Typargumente für die Methode
Foo.Deserialize<T>(System.IO.Stream)
können nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit anzugeben.
Dies schlägt fehl:
%Vor%Aber das funktioniert:
%Vor%oder:
%Vor% Ist es möglich, dies ohne Gießen zu tun, z.B. (List<MyStruct>)stream.Deserialize()
?
Aktualisierung:
Die Verwendung von stream.Deserialize<List<MyClass.MyStruct>>()
führt zu einem Fehler:
%Vor%
Update 2 (Beispiel-Konsolen-App) - einmal ausführen, um die Datei zu erstellen, um sie erneut zu lesen
%Vor%Ich nehme an, dass Sie Ihre Erweiterungsmethode wie folgt aufrufen:
%Vor% In diesem Fall kann der Compiler das T
für Deserialize
nicht bestimmen (es schaut nicht auf die Variable, der das Ergebnis des Methodenaufrufs zugewiesen ist).
Sie müssen also das Argument type explizit angeben:
%Vor%Das funktioniert:
%Vor%Sie können Ihre ursprüngliche generische Methode verwenden, Sie müssen nur den generischen Typ explizit so angeben ...
%Vor%Sie serialisieren den Typ der Liste und nicht die tatsächliche Liste. Es sollte sein:
%Vor% Außerdem müssen Sie MyStruct
als Serializable
markieren, damit es korrekt serialisiert wird.
Tags und Links c# generics extension-methods