Если вы хотите default(T)
, вы должны сказать это, а не null
, что имеет свое собственное значение. Если вы хотите, чтобы способность фактически передавала null
вместо типа значения, вы должны использовать Nullable<T>
.
Итак, ваш код станет:
private static void SaveOrRemove<T>(string key, Nullable<T> value)
{
if (!value.HasValue()) // is null
{
Console.WriteLine("Remove: " + key);
}
else
{
T val = value.Value;
// ...
}
}
Обратите внимание, что Nullable<T>
полезен только для типов значений (структуры, "встроенные", отличные от строки); для ссылочных типов вы все равно не сможете его использовать.
MSDN-ссылка