Enumerable. SingleOrDefault方法:
返回序列中满足指定条件的唯一元素;如果这类元素不存在,则返回默认值;如果有多个元素满足该条件,此方法将引发异常
http://msdn.microsoft.com/zh-cn/library/bb549274.aspx
Dictionary<int, string> dic = new Dictionary<int, string>();
Dictionary<int, string> dic2 = new Dictionary<int, string>();
dic.Add(2, "aaa");
dic.Add(3, "bbb");
string s  = dic.SingleOrDefault(d => d.Key == 2).Value;  //正确
dic2 = dic.SingleOrDefault(d => d.Key == 2);  //报错
Console.WriteLine(s);我想问,既然,SingleOrDefault返回的是序列中满足条件的唯一元素,那么,报错的那一句为什么会报错,返回的就是键值对啊
如果硬是要错的话,为什么正确的那句又是正确的,要错,大家都应该错啊!道理一样啊

解决方案 »

  1.   

    键值对不能直接赋值给Dictionary吧
    用dic2.Add函数吧
      

  2.   

    dic2 = dic.SingleOrDefault(d => d.Key == 2); //报错、
    这样并不代表一个集合
      

  3.   

    dic.SingleOrDefault(d => d.Key == 2)确实不是一个集合,不过,它总是一个键值对吧---“返回序列的满足条件的唯一元素”,而dic2就是一个键值对啊
      

  4.   

    Dictionary类型和KeyValuePair类型怎么可以互相赋值?
    你的dic2是Dictionary类型,你的dic.SingleOrDefault(d => d.Key == 2);返回的是KeyValuePair类型,两种不同的类型,你直接等号赋值,这错得太小儿科了吧。
      

  5.   

    dic.SingleOrDefault(d => d.Key == 2)确实不是一个集合,不过,它总是一个键值对吧
    这个是keyvaluepair,不是Dictionary
    因为返回的只是一个对象,而keyvaluepair合Dictionary的关系,好比string和string[]的关系