What happens when a null collection is queried with LINQ query syntax?
我的理解是什么都不会发生。
例如,此代码:
1 2 3 4
| foreach (var some in (from u in possiblyNullCollection ) )
{
//
} |
应按照以下要求进行防护:
1 2 3 4 5 6 7
| if ( possiblyNullCollection != null )
{
foreach (var some in (from u in possiblyNullCollection ) )
{
//
}
} |
号
或者查询空集合安全吗?
- …你试过了吗?
- 花了大约1分钟来试试这个
- 与…为什么.NET foreach循环在集合为空时引发NullRefException?
- 那不是复制品。
- …或者花一分钟的时间在网上调查那些抱怨不起作用的资源。也相关
- @BoltClock-更新
- 这个可能是一个副本(这可能是一个常见问题解答…)
- 我不明白为什么投反对票,毕竟这是一个合法的问题。如果它是如此的微不足道,一个简单的小于1百万的答案就可以了。
- 不管怎样,我得到了我的答案,我投票决定关闭它。
- @奥卡里兹:这不是一个合法的问题,因为你自己尝试这个问题所花费的时间比你发布这个问题所花费的时间要少。一个好的stackoverflow问题定义得很好,它给出了已经尝试过的方法以及为什么这些方法不能解决问题。没什么私人问题,但这类问题被认为是"嘿,我不想尝试这个。有人能帮我做吗?"注意这个问题本身是有效的。许多人认为这些函数在这些情况下不应该抛出异常。但他们是否这样做的答案就在你面前。
如果使用Linq查询空集合,它将引发异常。您需要检查是否为空。
但是,空集合是可以的。
要记住的一点是,集合为空通常被认为是不好的做法。与集合中包含空项类似,它可能会导致许多错误。
。
- 处理这个问题的常用成语是什么?像我的第二个样本一样检查它?
- 通常处理它的最佳方法是不允许集合以空开头。如果是类字段,请将其初始化为空集合。如果是方法参数,请在方法的开头检查它是否为空,如果为空,则抛出ArgumentNullException。假设您出于任何原因必须处理空集合,那么您可以像以前那样将foreach包装在if块中,也可以在foreach块中使用空合并运算符,如foreach (var some in (from u in (possiblyNullCollection ?? Enumerable.Empty()))),其中t是项的类型。