Возможный дубликат:
Добавление значения null в список < bool? > литой как IList, бросающий исключение.
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);
См. комментарии в приведенном выше коде.
Я понимаю причины этого (когда вы отбрасываете дженерики, время выполнения делает все возможное с ограниченной информацией). Мне просто интересно, есть ли способ обойти это, даже если это немного взломать.
Проблема возникла, когда я попробовал, чтобы общая версия функции использовала ту же частную реализацию, что и не общая версия, поэтому я могу обойти ее, если необходимо (имеют две очень похожие реализации), но, очевидно, лучше, если я может понять это.
ИЗМЕНИТЬ: Последние две записи, которые у меня выше, НЕ сбой, как я изначально сказал. Но первые два. Я добавил комментарии к этому эффекту в приведенном выше коде.