Подтвердить что ты не робот

Как сравнивать типы с нулевым значением?

У меня есть несколько мест, где мне нужно сравнить значения 2 (nullable), чтобы убедиться, что они одинаковые.

Я думаю, что в этой области должно быть что-то в этой поддержке, но ничего не найти, поэтому вместо этого нужно иметь следующее:

public static bool IsDifferentTo(this bool? x, bool? y)
{
    return (x.HasValue != y.HasValue) ? true : x.HasValue && x.Value != y.Value;
}

Тогда в коде есть if (x.IsDifferentTo(y)) ...

Тогда у меня есть аналогичные методы для нулевых ints, nullable double и т.д.

Нет ли более простого способа увидеть, являются ли два типа NULL одинаковыми?

Update:

Оказывается, причина в том, что этот метод существовал, потому что код был преобразован из VB.Net, где Nothing = Nothing возвращает false (сравните с С#, где null == null возвращает true). Вместо этого код VB.Net должен был использовать .Equals....

4b9b3361

Ответ 1

С# поддерживает "снятые" операторы, поэтому, если тип (bool? в этом случае) известен при компиляции, вы должны просто использовать:

return x != y;

Если вам нужны дженерики, то EqualityComparer<T>.Default - ваш друг:

return !EqualityComparer<T>.Default.Equals(x,y);

Обратите внимание, однако, что оба этих подхода используют подход "null == null" (в отличие от ANSI SQL). Если вам нужно "null != null", вам придется протестировать это отдельно:

return x == null || x != y;

Ответ 3

if (x.Equals(y)) 

Ответ 4

Просто используйте == или .Equals().

Ответ 5

Вы можете использовать статический метод Equals в System.Object:

var equal = object.Equals(objA, objB);