检查变量是空还是空的正确方法

Zap*_*ica 3 c# null

我有以下代码,我的同事告诉我这是不正确的,如果我的变量为null将崩溃:

List<FSKUser> users = null;

if (users == null || users.Count() == 0)
{
   return false;
}
Run Code Online (Sandbox Code Playgroud)

显然这=null只是为了测试目的.但是,当我运行此代码时,它正确运行并返回false.

我正在检查一种安全正确的检查方式吗?

Lua*_*aan 6

是的,这是安全和正确的方法.您的同事可能对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.在那种情况下,你们都有机会学习:)