Как сравнивать типы с нулевым значением?
У меня есть несколько мест, где мне нужно сравнить значения 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...
.
Ответы
Ответ 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;
Ответ 2
Nullable.Equals<T>
?
Ответ 3
if (x.Equals(y))
Ответ 4
Просто используйте ==
или .Equals()
.
Ответ 5
Вы можете использовать статический метод Equals в System.Object:
var equal = object.Equals(objA, objB);
Ответ 6
Используйте Compare:
http://msdn.microsoft.com/en-us/library/dxxt7t2a.aspx