关于c#:如何比较可空类型?

How to compare nullable types?

我有几个地方需要比较2个(可以为空)值,看看它们是否相同。

我认为框架中应该有一些东西来支持这一点,但是找不到任何东西,所以应该有以下内容:

1
2
3
4
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、可以为空的double等,我有类似的方法。

有没有一种更简单的方法来查看两个可以为空的类型是否相同?

更新:

原来这个方法存在的原因是因为代码是从vb.net转换而来的,其中nothing=nothing返回false(与c比较,其中null=null返回true)。vb.net代码应该使用.Equals...


C支持"提升"运算符,因此如果编译时已知类型(本例中为bool?),则应该能够使用:

1
return x != y;

如果你需要仿制药,那么EqualityComparer.Default就是你的朋友:

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

但是,请注意,这两种方法都使用"null == null"方法(与ansi-sql相反)。如果您需要"null != null",则必须单独测试:

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

EDOCX1?0?


1
if (x.Equals(y))


可以在System.Object上使用static equals方法:

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

只需使用==.Equals()


使用比较:

http://msdn.microsoft.com/en-us/library/dxxt7t2a.aspx