如何比较可空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);