default (T) ссылочного типа имеет значение null и приводит к гарантированному исключению NullReferenceException.
я есть общий метод, определенный следующим образом:
public void MyMethod<T>(T myArgument)
Первое, что я хочу сделать, это проверить, является ли значение myArgument значением по умолчанию для этого типа, примерно так:
if (myArgument == default(T))
Но это не компилируется, потому что я не гарантировал, что T будет реализовывать оператор ==. Поэтому я переключил код на это:
if (myArgument.Equals(default(T)))
Теперь это скомпилируется, но потерпит неудачу, если myArgument будет нулевым, что является частью того, что я тестирую. Я могу добавить явную проверку нуля следующим образом:
if (myArgument == null || myArgument.Equals(default(T)))
Теперь это кажется мне излишним. ReSharper даже предлагает мне заменить часть myArgument == null на myArgument == default (T), с которой я начал. Есть ли лучший способ решить эту проблему?
Мне нужно поддержатьобе ссылочные типы и типы значений.