在List中使用Find进行查找的时候,如果没有找到,正常情况下会返回一个null. 比如一个List<string>中,如果根据某个字符串过滤,没有找到的话,会返回一个null.
如果List<KeyValuePair<string, int>>中使用Linq进行查找,没有找到的情况下,返回的并非是null,而是[null, 0], 分别为string与int的默认值。
这是为什么?查看List的源码,在没有找到符合条件的元素的时候,会返回default(T),这个default在T为对象的情况下,会返回null,string也是对象,所以会返回null. 但是在结构体的情况下,就不能返回null了,而是返回结构体内部的默认值。KeyValuePair<string, int>是一个结构体,所以没有返回null.
包括如下代码,返回的都是int的默认值。