我有一个关于LINQ查询的问题。通常,查询返回IEnumerable<T>类型。如果返回值为空,不确定是否为空。我不确定如果下面的ToList()将抛出一个异常或只是一个空列表<string>如果没有发现IEnumerable结果?

   List<string> list = {"a"};
   // is the result null or something else?
   IEnumerable<string> ilist = from x in list where x == "ABC" select x;
   // Or directly to a list, exception thrown?
   List<string> list1 = (from x in list where x == "ABC" select x).ToList();

我知道这是一个非常简单的问题,但是我暂时没有VS可用。


当前回答

var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(Dump来自LinqPad)

其他回答

它将返回一个空的枚举对象。它不是空的。你可以睡觉的声音:)

var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(Dump来自LinqPad)

. tolist返回一个空列表。(与new List<T>()相同);

在Linq-to-SQL中,如果你试图在查询中获得第一个元素而没有结果,你会得到序列不包含元素错误。我可以向你保证,上面提到的错误不等于对象引用没有设置为对象的实例。 总之,不,它不会返回null,因为null不能说序列不包含任何元素,它总是说对象引用没有设置为对象的实例;)

它不会抛出异常,你会得到一个空列表。