posible duplicado:
Adding null to a List<bool?> cast as an IList throwing an exception.No se puede agregar a la lista de nula 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);
Ver los comentarios en el código de seguridad.
Entiendo las razones para esto (cuando descarta los genéricos, el tiempo de ejecución lo hace lo mejor que puede con información limitada). Me pregunto si hay una forma de evitar esto, incluso si es un truco.
El problema surgió cuando intenté que la versión genérica de una función utilizara la misma implementación privada que una versión no genérica, así que puedo evitarla si es necesario (tengo dos implementaciones muy similares), pero obviamente es mejor si Puedo resolver esto.
EDITAR: Las últimas dos entradas que he mencionado anteriormente NO fallan como dije originalmente. Pero los primeros dos sí. He agregado comentarios a tal efecto en el código anterior.
Su código funcionó perfectamente para mí sin excepción cuando lo probé. –
Puedo confirmar la excepción en el segundo ejemplo: '.Add ((int?) Null)', .NET 3.5 – Aren
Con 2 positivos y 1 negativo, es hora de que todo el mundo empiece a mencionar versiones de compiladores, etc. –