如何比较可空类型?

我有一些地方需要比较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)) ...

然后,我有类似的方法为可空整数,可空双精度等。

有没有更简单的方法来判断两个可空类型是否相同?

更新:

原来这个方法之所以存在是因为代码是从 VB.Net 转换过来的,其中 Nothing = Nothing 返回 false (与 C # 相比,其中 null = = null 返回 true)。Net 代码应该改为使用 .Equals...

56268 次浏览

可以在 System.Object 上使用静态 平等方法:

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

只要使用 ==或者 .Equals()

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;
if (x.Equals(y))

我想知道如何在 C # 上比较两个 nullable int,但是我总是在搜索之后得到这个链接,所以如果有人需要比较两个 nullable int,那么这会很有帮助

a.GetValueOrDefault(int.MinValue).CompareTo(b.GetValueOrDefault(long.MinValue));

(x?? 0).Equals(y)

将处理 null 和等于。