天天看点

List<KeyValuePair<string, int>> 返回空值不为null

在List中使用Find进行查找的时候,如果没有找到,正常情况下会返回一个null. 比如一个List<string>中,如果根据某个字符串过滤,没有找到的话,会返回一个null.

List<KeyValuePair<string, int>> 返回空值不为null

如果List<KeyValuePair<string, int>>中使用Linq进行查找,没有找到的情况下,返回的并非是null,而是[null, 0], 分别为string与int的默认值。

List<KeyValuePair<string, int>> 返回空值不为null

这是为什么?查看List的源码,在没有找到符合条件的元素的时候,会返回default(T),这个default在T为对象的情况下,会返回null,string也是对象,所以会返回null. 但是在结构体的情况下,就不能返回null了,而是返回结构体内部的默认值。KeyValuePair<string, int>是一个结构体,所以没有返回null.

List<KeyValuePair<string, int>> 返回空值不为null