c# - 检查变量是否为 null 或空的正确方法

标签 c# null

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

List<FSKUser> users = null;

if (users == null || users.Count() == 0)
{
   return false;
}

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

我检查的方式是安全正确的检查方式吗?

最佳答案

是的,这是安全正确的方法。您的同事可能对 C# 中的运算符优先级或 bool 表达式求值有一些奇怪的理解:)

||运算符(与 && 相同)将在确定结果后立即停止评估。因为 bool OR 永远不会产生 false只要其中一个操作数是 true ,它将要么在第一个操作数上失败(如果它为 null,结果为 true => 你完成了),要么它将计算两个运算符。

当然,如果您不反对使用扩展方法,可以方便地使用它来简化条件。例如。您可以使用这样的扩展方法:

public static bool IsEmpty<T>(List<T> @this)
{
  return @this == null || @this.Count == 0;
}

然后您可以使用这样的条件:

if (users.IsEmpty())
{
  ...
}

另外,请注意 List<T>有一个 Count property - 你可能应该使用它而不是扩展方法 Count() .最后,它会做同样的事情 IIRC(它检查可枚举对象是集合还是列表,IIRC),但它会通过一些循环来做到这一点。

您可能想问问您的同事他认为会发生什么。你有一个简单的测试用例,表明你是对的,但也许他有一些他自己不想这样做的原因。然而,最有可能的是他习惯了一种不同的编程语言,而不是真正的 C#-er。在这种情况下,你们都有机会学习 :)

关于c# - 检查变量是否为 null 或空的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22755458/

相关文章:

C# 如何检查一个数字是否是任何组值?

c# - 为什么部分方法必须是无效的?

c++ - 用于放入在一组函数中传递的参数的结构

c - environ 似乎没有以 NULL 结尾

ios - 使用核心数据通过关系获取属性值 - 当前传递 NULL

c# - 找不到 ASP.NET Web API 路由 Controller

javascript - ASP.net 项目图像按钮仅在双击时重定向到另一个页面

c# - DataGrid 列绑定(bind)到 List 的项目

null - mysqldump 将 null 存储为空白

PHP json_decode() 用看似有效的 JSON 返回 NULL?