Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果Any()为true,为什么LINQ会在Count()上抛出null引用错误?_C#_Linq - Fatal编程技术网

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

C# 如果Any()为true,为什么LINQ会在Count()上抛出null引用错误?,c#,linq,C#,Linq,我有一个问题-如果.Any()返回true,为什么在这个IEnumerable的.Count()方法中会出现空引用异常 Logger.Normal("{0}", targetWorkflow.GetStages().Any() ? "any is true!" : "any is false"); Logger.Normal("{0}", targetWorkflow.GetStages().Count()); 错误: StackTrace=[at Sth.Workflow.d_u13.M

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

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

StackTrace=[at Sth.Workflow.d_u13.MoveNext()XX at System.Linq.Enumerable.Count[TSource]

老实说,如果
.Any()
为true,我希望
Count()
方法应该至少返回1,而如果
Any()
为false,它将返回0

请告诉我哪里错了

另外-请注意,我不是在试图解决实际问题,我是在试图理解为什么
Any()==true
不能确保集合健康且“可计数”。

GetStages()
在生成不是序列中第一个项目的项目时,似乎在其自身代码内部引发异常。
任何
都可以在获得第一个项目后立即停止,这就是为什么它不会引发任何异常,但
计数
需要迭代整个序列以获得其结果


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

您可能只能枚举此集合一次。请尝试调用ToList,然后对其执行操作。是否可能
GetStages()
在第二次调用时返回空值?工作流的代码是你的吗?如果是的话,
GetStages
的定义是什么?如果不是你的,你从哪里得到的,你使用的是什么版本?你能显示代码吗?你问的是一个更深层次的问题的简单副作用,但没有关于它的代码或信息这个实际问题。无法回答。也解释了为什么
ToList()
引发了一个异常。做得很好!@Bartosz是的,应该这样做,但你必须解决实际问题。争论调用另一个方法是否不会触发它背后的编码问题是没有用的。@Bartosz任何时候
任何
都会起作用。如果不知道错误的实际原因,我们无法确定;可能不会在某些情况下,即使是第一项也会导致异常。@帕特里克霍夫曼-这很好,我不是在试图解决问题,我是在试图理解这种奇怪的行为。@Bartosz IEnumerable是惰性地解决的,因此,在您实际尝试枚举整个列表之前,GetStages中的所有代码都不会运行。