今天看到一段程式碼 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 
如果內容有誤請多鞭策謝謝