1

我用谷歌搜索了整整二十分钟。如果这是重复的,请原谅我。

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

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

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

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

4

2 回答 2

5

我能想到的最好的方法是在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;
    }
}
于 2013-05-13T23:54:37.043 回答
1

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

于 2013-05-13T23:55:07.847 回答