【问题标题】:AppSettings find key by valueAppSettings 按值查找键
【发布时间】:2016-06-01 07:11:52
【问题描述】:

我有一个非常简单的问题。

如果我有值,我想从 Web.config 中的 AppSettings 中找到某个键​​

所以为了简单起见,是否有可能通过指定值而不是键来找到 AppSettings 条目

<appSettings>
  <add key="my:Hello" value="world"/>
  <add key="my:Test" value="New"/>
  <add key="my:Test2" value="SecondThing"/>
  etc...
</appSettings>

假设我的代码中有某个地方 world,我想找到 appsetting 的密钥 Hello。有没有可能这样做?

我不想被问到为什么要这样做,或者只是将其保存在某个数据库中。

【问题讨论】:

  • 你不是倒着做吗?还是你只是想看看能不能做到?
  • 我正在倒退,但我知道这一点..但我必须这样做..

标签: c# asp.net-mvc web-config


【解决方案1】:

你可以这样做:

var matches = ConfigurationManager.AppSettings.AllKeys.Select(t => 
new { Key = t, Value = 
ConfigurationManager.AppSettings[t] }).Where(i => i.Value == "world");

(显然这会返回一个键/值对,您可以添加 .Select(k => k.Key); 来获取键。另请注意,使用 where 可能会返回多个倍数,您可以使用 SingleOrDefault/FirstOrDefault 作为另一种选择)

【讨论】:

    【解决方案2】:
    var settings = ConfigurationManager.AppSettings;
    var keys = settings.AllKeys.Where(k => settings[k] == "world");
    

    但请注意 - 值不是唯一的。

    【讨论】:

    • 虽然这个答案是对的,但我标记了另一个答案,因为它更灵活。
    • @JordyvanEijk 没问题。请注意,其他解决方案并不灵活 - 它只是消耗更多内存:)
    【解决方案3】:

    您可以检索所有键并找到包含该值的键:

    foreach (string key in ConfigurationManager.AppSettings)
    {
        if (ConfigurationManager.AppSettings[key] == "world") 
        {
            return key;
        }
    }
    

    【讨论】:

    • 虽然这个答案是对的,但我标记了另一个答案,因为它更灵活。
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多