我有以下代码,我的同事告诉我这是不正确的,如果我的变量为null将崩溃:
List<FSKUser> users = null;
if (users == null || users.Count() == 0)
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
显然这=null
只是为了测试目的.但是,当我运行此代码时,它正确运行并返回false.
我正在检查一种安全正确的检查方式吗?
是的,这是安全和正确的方法.您的同事可能对C#中的运算符优先级或布尔表达式求值有一些奇怪的理解:)
该||
运营商(同&&
)将停止尽快评估,因为它可以肯定的结果.由于布尔或可以永不屈服false
,只要一个操作数是true
,它会无论是在第一个操作失败(如果它是零,结果true
=>大功告成),否则将评估这两个运营商.
当然,如果您不反对使用扩展方法,可以方便地使用它来简化条件.例如.你可以使用这样的扩展方法:
public static bool IsEmpty<T>(List<T> @this)
{
return @this == null || @this.Count == 0;
}
Run Code Online (Sandbox Code Playgroud)
然后,它允许您使用这样的条件:
if (users.IsEmpty())
{
...
}
Run Code Online (Sandbox Code Playgroud)
另外,请注意List<T>
有一个Count
属性 - 您应该使用它而不是扩展方法Count()
.最后,它会做同样的事情IIRC(它检查枚举是否是集合或列表,IIRC),但它通过一些循环来做到这一点.
你可能想问你的同事他认为会发生什么.你有一个简单的测试用例表明你是对的,但也许他有一些他自己为什么不想要的原因.然而,最可能的是,他习惯于使用不同的编程语言,而实际上并不是本地的C#-er.在那种情况下,你们都有机会学习:)
归档时间: |
|
查看次数: |
1359 次 |
最近记录: |