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