C# 使用LINQ查询语法查询空集合时会发生什么情况?

C# 使用LINQ查询语法查询空集合时会发生什么情况?,c#,linq,collections,null,C#,Linq,Collections,Null,我的理解是什么也不会发生 例如,此代码: foreach (var some in (from u in possiblyNullCollection ) ) { // } 应按照以下要求进行防护: if ( possiblyNullCollection != null ) { foreach (var some in (from u in possiblyNullCollection ) ) { // } } 或者查询空集合是否安全 如

我的理解是什么也不会发生

例如,此代码:

foreach (var some in (from u in possiblyNullCollection ) ) 
{
    // 
}
应按照以下要求进行防护:

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

或者查询空集合是否安全

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

不过,空集合也可以

需要记住的是,集合为null通常被认为是不好的做法。与集合中的空项类似,它可能会导致许多错误


…你试过吗?试一下这个大概需要1分钟,与。。。或者花一分钟研究一下网上的许多资源,当这些资源不起作用时,他们会抱怨@OscarRyz:这不是一个合法的问题,因为你自己尝试这个问题所花的时间比你发布这个问题所花的时间要少。一个好的stackoverflow问题定义得很好,它展示了已经尝试过的内容以及为什么这些东西没有解决问题。没有什么私人问题,但这类问题给人的印象是“嘿,我不想尝试这个。有人能帮我做吗?”请注意,这个问题本身是有效的。许多人认为,在这些情况下,这些函数不应该抛出异常。但是关于他们是否这样做的答案就摆在你面前。处理这个问题的常用成语是什么?要像在我的第二个示例中那样检查它,通常最好的处理方法是首先不允许集合为null。如果是类字段,则将其初始化为空集合。如果它是一个方法参数,请在方法开头检查它是否为null,如果是,则抛出ArgumentNullException。假设出于任何原因必须处理空集合,您可以像以前一样将foreach包装在if块中,或者可以像这样在foreach块中使用null coalesce操作符
foreach(var some in(from u in(possiblyNullCollection??Enumerable.Empty()))
其中T是项的类型。