Eventuali duplicati:
Adding null to a List<bool?> cast as an IList throwing an exception.Non può aggiungere nulla alla lista dei 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);
Vedi i commenti nel codice di cui sopra.
Comprendo i motivi di ciò (quando si eliminano i generici, il runtime fa il possibile con informazioni limitate). Mi sto solo chiedendo se c'è un modo per aggirare questo, anche se è un po 'un trucco.
Il problema è sorto quando ho provato che la versione generica di una funzione utilizzava la stessa implementazione privata di una versione non generica, quindi posso aggirarla se necessario (ho due implementazioni molto simili), ma ovviamente è meglio se Posso capirlo.
MODIFICA: le ultime due voci che ho sopra NON falliscono come ho detto originariamente. Ma i primi due lo fanno. Ho aggiunto commenti in tal senso nel codice sopra.
Il tuo codice ha funzionato perfettamente per me senza eccezioni quando l'ho provato. –
Posso confermare l'eccezione nel secondo esempio: '.Add ((int?) Null)', .NET 3.5 – Aren
Con 2 positivi e 1 negativo, è ora che tutti inizino a menzionare le versioni del compilatore ecc. –