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), с которой я начал. Есть ли лучший способ решить эту проблему?

Мне нужно поддержатьобе ссылочные типы и типы значений.

Ответы на вопрос(12)

Ваш ответ на вопрос