Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# Linq表达式引发ArgumentNullException_C#_Linq - Fatal编程技术网

C# Linq表达式引发ArgumentNullException

C# Linq表达式引发ArgumentNullException,c#,linq,C#,Linq,GetSpecialNodes有时返回null。当它这样做时,我会抛出一个ArgumentNullException。除了在运行linq表达式和执行空检查之前调用GetSpecialNodes之外,还有一种优雅的方式来处理对linq表达式的更改吗 var nodes = (from HtmlNode node in document.GetSpecialNodes() select node); 可能是 我想您所做的不仅仅是选择来自GetSpecialNodes的节点。因此,您可能希望避免在G

GetSpecialNodes有时返回null。当它这样做时,我会抛出一个ArgumentNullException。除了在运行linq表达式和执行空检查之前调用GetSpecialNodes之外,还有一种优雅的方式来处理对linq表达式的更改吗

var nodes = (from HtmlNode node in document.GetSpecialNodes() select node);
可能是


我想您所做的不仅仅是选择来自GetSpecialNodes的节点。因此,您可能希望避免在GetSpecialNodes上调用ToList以从延迟执行中获益。您可以使用Enumerable.Empty创建空集:

var nodes = document.GetSpecialNodes() ?? Enumerable.Empty<HtmlNode>();
我认为,在定义查询之前执行此操作时,您的代码将更具可读性:

var nodes = document.GetSpecialNodes() ?? Enumerable.Empty<HtmlNode>();
var result = from HtmlNode node in nodes where /* some predicate */
vs


如果您有此选项,请更改GetSpecialNodes,使其返回Enumerable.Empty而不是null。最好是返回一个空集合而不是null,然后您可以使用.Any扩展方法检查集合中的项

或者像Stefan建议的那样:

var nodes = 
  from HtmlNode node in (document.GetSpecialNodes() ?? Enumerable.Empty<HtmlNode>())
  select node;
文档有值还是为空?
var nodes = (from HtmlNode node in (document.GetSpecialNodes() ?? Enumerable.Empty<HtmlNode>()) where /* some predicate */)
var nodes = 
  from HtmlNode node in (document.GetSpecialNodes() ?? Enumerable.Empty<HtmlNode>())
  select node;