SelectManyでAnyしたとき、ネスト先がNullだとNullReferenceExceptionになる。
error.cs
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var test = new List<string>{
null
};
Console.WriteLine( test == null);
Console.WriteLine( test.Any());
var test2 = test.SelectMany(x=> x);
Console.WriteLine( test2 == null); // ここはNullじゃないのでFalseになる
Console.WriteLine( test2.Any());
}
}
実行結果
False
Stack Trace:
[System.NullReferenceException: Object reference not set to an instance of an object.]
at System.Linq.Enumerable.<SelectManyIterator>d__16`2.MoveNext()
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
at Program.Main() :line 15
事前にNullチェックしてあげると回避できるよ。
var test2 = test.Where(x => x != null).SelectMany(x=> x);
あたりまえだけどちょっと困ったのでめも
- 追記2018.1.25
こちらの方がすっきり
var test2 = test.SelectMany(x=> x ?? string.Empty);