请问这个LINQ查询方法

sdrsfc4 2011-09-04 09:15:05
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返回的是序列中满足条件的唯一元素,那么,报错的那一句为什么会报错,返回的就是键值对啊
如果硬是要错的话,为什么正确的那句又是正确的,要错,大家都应该错啊!道理一样啊
...全文
65 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixuyue 2011-09-04
  • 打赏
  • 举报
回复
dic.SingleOrDefault(d => d.Key == 2)确实不是一个集合,不过,它总是一个键值对吧
这个是keyvaluepair,不是Dictionary
因为返回的只是一个对象,而keyvaluepair合Dictionary的关系,好比string和string[]的关系
qldsrx 2011-09-04
  • 打赏
  • 举报
回复
Dictionary类型和KeyValuePair类型怎么可以互相赋值?
你的dic2是Dictionary类型,你的dic.SingleOrDefault(d => d.Key == 2);返回的是KeyValuePair类型,两种不同的类型,你直接等号赋值,这错得太小儿科了吧。
sdrsfc4 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lmaohuanl 的回复:]

dic2 = dic.SingleOrDefault(d => d.Key == 2); //报错、
这样并不代表一个集合
[/Quote]
dic.SingleOrDefault(d => d.Key == 2)确实不是一个集合,不过,它总是一个键值对吧---“返回序列的满足条件的唯一元素”,而dic2就是一个键值对啊
LMAOhuaNL 2011-09-04
  • 打赏
  • 举报
回复
dic2 = dic.SingleOrDefault(d => d.Key == 2); //报错、
这样并不代表一个集合
showjim 2011-09-04
  • 打赏
  • 举报
回复
键值对不能直接赋值给Dictionary吧
用dic2.Add函数吧

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧