Тест для равенства значению по умолчанию

Следующее не компилирует:

public void MyMethod<T>(T value)
{
    if (value == default(T))
    {
        // do stuff
    }
}

Ошибка: Operator '==' cannot be applied to operands of type 'T' and 'T'

Я не могу использовать value == null потому что T может быть структура.
Я не могу использовать value.Equals(default(T)) потому что value может быть null.
Что надлежащий путь состоит в том, чтобы протестировать на равенство значению по умолчанию?

53
задан Roman Boiko 12 December 2009 в 23:27
поделиться

2 ответа

Чтобы избежать бокса для struct / Nullable, я бы использовал:

if (EqualityComparer<T>.Default.Equals(value,default(T)))
{
    // do stuff
}

Это поддерживает любой T, который реализует IEquatable, используя объект. Equals как резервная копия, и обрабатывает null и т.д. (и поднимает операторы для Nullable) автоматически.

Также существует Comparer.Default, который обрабатывает сравнительные тесты. Он обрабатывает T, которые реализуют IComparable, возвращаясь к IComparable - снова обрабатывает null и поднимает операторы.

.
79
ответ дан 7 November 2019 в 08:35
поделиться

А как насчет

object.Equals(value, default(T))
28
ответ дан 7 November 2019 в 08:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: