天天看點

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