我有几个地方需要比较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)) ...
然后我有类似的可以为空的int,可空的双打等方法。
是否有更简单的方法来查看两个可空类型是否相同?
更新
原来这个方法存在的原因是因为代码已经从VB.Net转换而来,其中Nothing = Nothing返回false(与C#相比,null == null返回true)。 VB.Net代码应该使用.Equals...
代替。
答案 0 :(得分:67)
C#支持“提升”运算符,因此如果在编译时已知类型(在这种情况下为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;
答案 1 :(得分:32)
答案 2 :(得分:20)
if (x.Equals(y))
答案 3 :(得分:6)
您可以在System.Object上使用静态Equals方法:
var equal = object.Equals(objA, objB);
答案 4 :(得分:5)
只需使用==
或.Equals()
。
答案 5 :(得分:3)
答案 6 :(得分:1)
(x?? 0).Equals(y)
将处理null和equals。
答案 7 :(得分:0)
我想找到如何比较C#上两个可为null的int的方法,但是我总是在搜索后获得此链接,因此,如果有人需要精确比较两个可为null的int的话,这可能会有所帮助
a.GetValueOrDefault(int.MinValue).CompareTo(b.GetValueOrDefault(long.MinValue));