当我必须使用namevaluecollection来赋值时,我如何找到键?

本文关键字:何找 namevaluecollection 赋值 | 更新日期: 2023-09-27 18:13:27

我在谷歌上搜了整整二十分钟。如果这是一件复制品,请原谅。

所以我从app.config文件中读取,并有一堆键/值对

{'a','1'},{'b','5'},{'c','9'} ... etc

当给出键时查找值很容易。但事实证明,逆转比我想象的要困难得多。

奇怪的是,msdn上的api似乎没有提到任何关于反向搜索的内容。
如果只给你"1",你如何找到键的值?

当我必须使用namevaluecollection来赋值时,我如何找到键?

我能想到的最好的方法是在AllKeys属性上使用Linq:

myNameValueCollection.AllKeys.First(key => myNameValueCollection[key] == myValue);

不幸的是,NameValueCollection没有实现IEnumerable<KeyValuePair<string, string>>

我从你的评论中看出你对Linq不太熟悉。我在评论中提供了一些链接,帮助你了解。这个特殊的Linq查询大致相当于以下内容,写得非常简洁:

foreach(var key in myNameValueCollection.AllKeys)
{
    var value = myNameValueCollection.AllKeys[key];
    if (value == myValue)
    {
        return value;
    }
}

当然这是单向的,因为散列函数应用于键而不是值。然而,如果你的值是不同的,有明显的解决办法(记住,它们不一定是)。Eugen在评论中的建议可能是最好的,如果你要重复做值查找。如果您正在寻找更多的一次性解决方案,您可以循环遍历键检查值是否匹配。当值匹配时,您知道它与哪个键相关联。