如果Any()为true,为什么LINQ会在Count()上抛出空引用错误?

时间:2016-05-03 14:25:17

标签: c# linq

我有一个问题 - 如果.Count()返回true,为什么我会在此IEnumerable的.Any()方法中获得空引用异常?

 Logger.Normal("{0}", targetWorkflow.GetStages().Any() ? "any is true!" : "any is false");
 Logger.Normal("{0}", targetWorkflow.GetStages().Count());

错误:

StackTrace = [ at Sth.Workflow.<GetStages>d__13.MoveNext()XX at System.Linq.Enumerable.Count[TSource]

老实说,如果Count()为真,我希望.Any()方法至少返回1,而如果Any()为假,它会返回0?

请告诉我错误的地方。

另外 - 请注意,我并非尝试解决实际问题,我想了解为什么Any() == true无法确保收藏品健康且“可数”。

1 个答案:

答案 0 :(得分:7)

当生成一些不是序列中第一项的项时,

GetStages()似乎在其自己的代码内部抛出异常。 Any可以在获得第一个项目后立即停止,这就是为什么它不会抛出任何异常,但Count需要迭代整个序列才能获得结果。

GetStages()方法内部存在一些错误(或者某些违反了您正在使用的用途)与您所显示的代码无关。