2012-01-02 6 views
2

GetSpecialNodesは時にはnullを返します。そうなると、ArgumentNullExceptionがスローされます。 Linq式を実行してヌルチェックを実行する前に、GetSpecialNodesを呼び出す以外にも、エレガントな処理方法(linq式の変更)がありますか?Linq式がArgumentNullExceptionをスローする

var nodes = (from HtmlNode node in document.GetSpecialNodes() select node); 
+0

は '値をdocument'たか、それがnullでありますか? – Fischermaen

答えて

3

私はあなただけGetSpecialNodes()からノードを選択する以上のものをやっていると思い

var nodes = (document.GetSpecialNodes() ?? new List<HtmlNode>()).ToList<HtmlNode>() 
2

おそれ。したがって、おそらくToList()GetSpecialNodes()に呼んで遅延実行から利益を得ないようにする必要があります。

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

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

:私はあなたがクエリを定義する前に、これを行うとき、コードが読みやすくなると思う

var nodes = document.GetSpecialNodes() ?? Enumerable.Empty<HtmlNode>(); 

:あなたは空のセットを作成するためにEnumerable.Empty<HtmlNode>()を使用することができますオプションがある場合はの代わりにEnumerable.Empty<HtmlNode>()を返すようにGetSpecialNodes()を変更してください。 NULLの代わりに空のコレクションを返す方が良い場合は、.Any()拡張メソッドを使用してアイテムのコレクションをチェックするだけで済みます。

それともステファンが示唆したように:

var nodes = 
    from HtmlNode node in (document.GetSpecialNodes() ?? Enumerable.Empty<HtmlNode>()) 
    select node; 
関連する問題