【问题标题】:What happens when a null collection is queried with LINQ query syntax? [closed]使用 LINQ 查询语法查询空集合时会发生什么? [关闭]
【发布时间】:2012-04-11 14:22:33
【问题描述】:

我的理解是什么都不会发生。

例如这段代码:

foreach (var some in (from u in possiblyNullCollection ) ) 
{
    // 
}

应该被保护为:

if ( possiblyNullCollection != null ) 
{ 
    foreach (var some in (from u in possiblyNullCollection ) ) 
    {
     // 
    }
}

或者查询空集合是否安全?

【问题讨论】:

  • ...你试过了吗?
  • 试一试大概需要 1 分钟
  • ... 或花一分钟时间研究网上的许多资源,这些资源在不起作用时会抱怨。 Also related
  • @OscarRyz:这不是一个合法的问题,因为您自己尝试它所花费的时间比您发布问题所花费的时间要少。一个好的 stackoverflow 问题定义明确,并介绍了已经尝试过的内容以及为什么这些东西没有解决问题。没有什么私人的,但这种类型的问题给人的印象是“嘿,我不想尝试这个。有人可以帮我做。”请注意,问题本身是有效的。很多人觉得这些函数在这些情况下不应该抛出异常。但他们是否这样做的答案就在你面前。

标签: c# linq collections null


【解决方案1】:

如果您使用 LINQ 查询空集合,它将引发异常。您需要检查是否为空。

不过,空集合也没问题。

要记住的是,集合为空通常被认为是不好的做法。类似于集合中有 null 项,它会导致很多错误。

【讨论】:

  • 处理这个问题的常用习语是什么?像我的第二个样本一样检查它?
  • 通常最好的处理方法是不允许集合一开始就为空。如果是类字段,则将其初始化为空集合。如果是方法参数,则在方法的开头检查它是否为 null,如果是则抛出 ArgumentNullException。假设您出于某种原因必须处理空集合,您可以像您一样将 foreach 包装在 if 块中,或者您可以像 foreach (var some in (from u in (possiblyNullCollection ?? Enumerable.Empty<T>()))) 这样在 foreach 块中使用空合并运算符,其中 T 是项目的类型.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
相关资源
最近更新 更多