Мій підхід - робити
(object)item == null
на яку я покладаюсь на object
власного оператора рівності, який не може помилитися. Або власний метод розширення (і перевантаження):
public static bool IsNull<T>(this T obj) where T : class
{
return (object)obj == null;
}
public static bool IsNull<T>(this T? obj) where T : struct
{
return !obj.HasValue;
}
або обробляти більше справ, можливо:
public static bool IsNull<T>(this T obj) where T : class
{
return (object)obj == null || obj == DBNull.Value;
}
Обмеження заважає IsNull
типам значень. Тепер це так само мило, як дзвонити
object obj = new object();
Guid? guid = null;
bool b = obj.IsNull(); // false
b = guid.IsNull(); // true
2.IsNull(); // error
це означає, що у мене є один стійкий / не схильний до помилок стиль перевірки на наявність нулів. Я також виявив (object)item == null
, що дуже-дуже трохи швидше, ніжObject.ReferenceEquals(item, null)
, але тільки якщо це має значення (я зараз працюю над тим, де я повинен все оптимізувати!).
Щоб переглянути повний посібник із здійснення перевірок рівності, див. Що таке "Найкраща практика" для порівняння двох примірників еталонного типу?
Assert.IsFalse(foo2 == foo1);