今天看到一段程式碼 FirstOrDefault().Key 引起我的好奇心
前言
其正常來說FirstOrDefault().Key 直覺會想到可能有NullReferenceException
但是這段程式碼卻活的好好
Dictionary
程式碼範例如下
public void Demo1()
{
Dictionary<Order, int> list = new Dictionary<Order, int>();
list.Add(new Order { ID = 1 }, DateTime.Now);
var foo = list.Where(x => x.Key.ID == 99);
var flag = foo.FirstOrDefault().Key == null;
}
public class Order
{
public int ID { get; set; }
public char Name { get; set; }
}
首先 Dictionary 下 Where 回傳是IEnumerable<KeyValuePair<Order, int>>
KeyValuePair 是結構所以不會是null
所以找不到東西回傳的會是 IEnumerable 有一筆KeyValuePair (如果是list 內IEnumerable 內就是null)
KeyValuePair 的內容 key 是 null ,value 是 0
所以 程式碼會 FirstOrDefault().Key == null 不會有問題
解法
var flag = list.Any(x => x.Key.ID == 99)
就可以達到一樣的效果
結語
今日成長 KeyValuePair 原來是結構阿
今天就先這樣囉 下次聊 Bye
如果內容有誤請多鞭策謝謝