如何比较可空types?

我有几个地方,我需要比较2(空)值,看看他们是否是相同的。

我觉得在框架中应该有一些东西来支持这个,但是找不到任何东西,所以应该有以下几点:

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)) ...

然后我有类似的方法可为空,可空双打等

有没有更简单的方法来查看两个可空types是否相同?

更新:

原来这个方法存在的原因是因为代码已经从VB.Net转换,其中Nothing = Nothing返回false(比较C#,其中null == null返回true)。 VB.Net代码应该使用.Equals...来代替。

C#支持“提升”操作符,所以如果在编译时已知types(在本例中为bool? ),则应该可以使用:

 return x != y; 

如果你需要generics,那么EqualityComparer<T>.Default是你的朋友:

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

但是请注意,这两种方法都使用“ null == null ”方法(与ANSI SQL相反)。 如果你需要“ null != null ”,那么你必须单独testing:

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

Nullable.Equals<T>

 if (x.Equals(y)) 

只需使用==.Equals()

您可以在System.Object上使用静态Equals方法:

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