Dav*_*001 58 c# extension-methods nullable
我有几个地方需要比较2(可空)值,看看它们是否相同.
我认为框架中应该有一些东西可以支持这个,但找不到任何东西,所以请注意以下几点:
public static bool IsDifferentTo(this bool? x, bool? y)
{
return (x.HasValue != y.HasValue) ? true : x.HasValue && x.Value != y.Value;
}
Run Code Online (Sandbox Code Playgroud)
然后,在我的代码中 if (x.IsDifferentTo(y)) ...
然后我有类似的可以为空的int,可空的双打等方法.
是否有更简单的方法来查看两个可空类型是否相同?
更新:
原来这个方法存在的原因是因为代码已经从VB.Net转换而来,其中Nothing = Nothing返回false(与C#相比,null == null返回true).应该使用VB.Net代码.Equals....
Mar*_*ell 72
C#支持"提升"运算符,因此如果bool?在编译时已知类型(在本例中),您应该只能使用:
return x != y;
Run Code Online (Sandbox Code Playgroud)
如果你需要泛型,那么EqualityComparer<T>.Default你的朋友是:
return !EqualityComparer<T>.Default.Equals(x,y);
Run Code Online (Sandbox Code Playgroud)
但请注意,这两种方法都使用" null == null"方法(与ANSI SQL形成对比).如果你需要" null != null"那么你必须单独测试:
return x == null || x != y;
Run Code Online (Sandbox Code Playgroud)
Ant*_*lev 39
Kas*_*hif 22
if (x.Equals(y))
Run Code Online (Sandbox Code Playgroud)
您可以在System.Object上使用静态Equals方法:
var equal = object.Equals(objA, objB);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39518 次 |
| 最近记录: |