Powiel możliwe:
Adding null to a List<bool?> cast as an IList throwing an exception.Nie można dodać do listy zerowa nullables
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);
Zobacz komentarze w powyższym kodzie.
W pewnym sensie rozumiem, dlaczego tak się dzieje (kiedy odrzuca się generyczne środowisko wykonawcze, robi to, co jest w stanie, przy ograniczonych informacjach). Zastanawiam się, czy jest na to sposób, nawet jeśli to trochę hack.
Problem powstał, gdy próbowałem, aby ogólna wersja funkcji korzystała z tej samej implementacji prywatnej, co wersja ogólna, więc mogę obejść ją w razie potrzeby (mam dwie bardzo podobne implementacje), ale oczywiście lepiej, jeśli Rozumiem to.
EDYCJA: Dwa ostatnie wpisy, które mam powyżej, NIE zawodzą, tak jak początkowo powiedziałem. Ale pierwsze dwie. Dodałem komentarze do tego efektu w powyższym kodzie.
Twój kod działał idealnie bez wyjątku, kiedy go wypróbowałem. –
Mogę potwierdzić wyjątek w drugim przykładzie: '.Add ((int?) Null)', .NET 3.5 – Aren
Z 2 pozytywami i 1 negatywem, czas, aby wszyscy zaczęli wymieniać wersje kompilatorów itp. –