我有一个MultiValueDictionary<string, string>
,我试图通过值获取一个键。
var dic = na.prevNext; // Getter to get MultiValueDictionary
string nodePointingToThisOne = "";
foreach (var item in dic)
{
if(item.Value == "test")
{
nodePointingToThisOne = item.Key;
}
break;
}
这不起作用,所以我尝试Linq:
string nodePointingToThisOne = dic.Where(x => x.Value == this.nodeID).Select(x => x.Key);
但在这两个我得到这个错误:Operator '==' cannot be applied to operands of type 'System.Collections.Generic.IReadOnlyCollection<string>' and 'string'
所以我的问题是如何对一个只读集合进行比较?我知道如果一个键存在多次会出现问题,但我现在将问题简化为这一个。
我读了Get Dictionary key by using the dictionary value
LINQ: Getting Keys for a given list of Values from Dictionary and vice versa
get dictionary key by value
Getting key of value of a generic Dictionary?
Get key from value - Dictionary<string, List>
但它们处理的是“普通”字典。
5条答案
按热度按时间jobtbby31#
由于
Value
属性本身可能包含多个值,您无法使用==
运算符将其与特定字符串直接比较。请改用Contains()
:...或在方法链版本中:
kqhtkvqz2#
尝试按Keys进行迭代,然后比较值,仅当Value匹配时才返回Key。
就像这样:
iqjalb3h3#
可以像这样迭代键
您还可以像这样迭代值
您的值为="澳大利亚"
您的密钥为="Aus"
bxfogqkk4#
如果你看一下MultiValueDictionary,,第81行会给予你一个提示,它是:
因此,对于您的情况,解决方案类似:
plicqrtu5#
为我工作: