这看起来很简单,但我有一个keyvalue对列表和一个试图获取密钥的linq语句,我不明白为什么这个剂量工作Ex
List<KeyValuePair<int, string>> list = new List<KeyValuePair<int, string>>();
列表包含值:1,test1 | 2,test2 | 3,test3作为数据 我的linq声明是:
string Key = list.AsEnumerable(x => x.Value == "test2").Select(x => x.Key).ToString();
看起来很简单,只能起作用吗?
答案 0 :(得分:1)
要获得单个值的密钥,您需要:
string Key = list.Single(x => x.Value == "test2").Key.ToString();
你写的不应该编译。 AsEnumerable()
没有过载谓词。
如果它确实编译了,那么当你在ToString()
上调用IEnumerable<int>
时,几乎肯定不会给你你想要的东西,这将返回该类型的名称,而不是Single()
枚举中的值或First()
值。
答案 1 :(得分:1)
您可以使用FirstOrDefault
var pair = list.FirstOrDefault(x => x.Value == "test2");
if(pair != null)
string Key = pair.Key.ToString();
这比First
和Single
更安全,因为如果没有KeyValuePair
给定Value
或者有多个元素,它就不会抛出异常具有给定的价值。