[沒有蠢問題] FirstOrDefault().Key 這樣會有爆炸的機會嗎

今天看到一段程式碼 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 

如果內容有誤請多鞭策謝謝