Mögliche Duplizieren:
Adding null to a List<bool?> cast as an IList throwing an exception.kann nicht null auf Merknullables
List<int?> listONullables = new List<int?>();
IList degenericed = listONullables;
// This works fine
listONullables.Add(null);
// Run time exception:
// "The value "" is not of type "System.Nullable`1[System.Int32]"
// and cannot be used in this generic collection. Parameter name: value"
degenericed.Add(null);
// Also does not work. Same exception
degenericed.Add((int?)null);
// Also does not work
// EDIT: I was mistaken, this does work
degenericed.Add((int?)1);
// Also does not work
// EDIT: I was mistaken, this does work
degenericed.Add(1);
die Kommentare in dem obigen Code.
Ich verstehe die Gründe dafür (wenn Sie die Generika wegwerfen, tut die Laufzeit mit begrenzten Informationen das Beste). Ich frage mich nur, ob es einen Weg gibt, auch wenn es ein bisschen ein Hack ist.
Das Problem entstand, wenn ich versuchte, die generische Version einer Funktion die gleiche private Implementierung wie eine nicht generische Version zu verwenden, so dass ich es umgehen kann (zwei sehr ähnliche Implementierungen), aber natürlich ist es besser, wenn Ich kann das herausfinden.
BEARBEITEN: Die letzten zwei Einträge, die ich oben habe, scheitern NICHT wie ich ursprünglich sagte. Aber die ersten beiden tun es. Ich habe dazu im obigen Code Kommentare hinzugefügt.
Ihr Code lief perfekt für mich ohne eine Ausnahme, als ich es versuchte. –
Ich kann die Ausnahme auf dem zweiten Beispiel bestätigen: '.Add ((int?) Null)', .NET 3.5 – Aren
Mit 2 positiven und 1 negativen, ist es Zeit, dass jeder begann, Compiler-Versionen etc. zu nennen. –