4 回答

TA贡献1821条经验 获得超5个赞
没有明确的保证,但按照惯例,包括所有 LINQ 方法在内的所有 LINQ 方法GroupBy
都将始终返回非空条目,因此null
可以安全地省略 -check。否则查询的可组合性将被破坏,您也会null
在文档中看到很多 -checks,例如在Group query results中。
每个分组结果也将至少有一个条目,否则它将违反其合同。

TA贡献1836条经验 获得超4个赞
是的,根据 agroup
在这种情况下的含义的定义,组必须既非空也不为空,并且组的序列(IEnumerable
或IQueryable
)必须是非空的。
考虑一下,一个空组从哪里来?一个组必须包含那些根据为匹配定义的任何标准都相同的项目。如果在特定的可能键上没有任何匹配项,则它不能包含在组序列中。因此,它不能为空或空,当然。
同时,实际结果GroupBy
必须有所有这些组,所以虽然可能有 0 个组(如果有空输入),但不能有null
组。
删除空检查和空检查是安全的(不能保证空检查不会重新查询,尽管这不太可能实现)。
空性检查总是可以安全地省略,因为foreach
在空序列的迭代器上,它只会false
从第一个得到 a ,因此无论如何MoveNext()
都不会在其中运行代码。foreach

TA贡献1851条经验 获得超4个赞
您还可以检查集合中有多少元素(组本身是一个集合,并且所有组groupResult也是一个集合)。所以你可以检查是否有元素。
看看下面的代码:
if(groupResult.Count() > 0) { }
foreach (var group in groupResult)
if(group.Count() > 0) { }
将它与检查null值结合起来:
if(group != null && group.Count() > 0) { }
这里短路将保证 if groupis nullthen 它不会检查在这种情况下可能引发异常的第二个条件。
- 4 回答
- 0 关注
- 212 浏览
添加回答
举报