Как проверить, существует ли ключ appSettings?


Как проверить, доступен ли параметр приложения?

т. е. приложение.конфигурации

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key ="someKey" value="someValue"/>
  </appSettings>
</configuration>

и в codefile

if (ConfigurationManager.AppSettings.ContainsKey("someKey"))
{
  // Do Something
}else{
  // Do Something Else
}
7 115

7 ответов:

MSDN: Configuration Manager.AppSettings

if (ConfigurationManager.AppSettings[name] != null)
{
// Now do your magic..
}

или

string s = ConfigurationManager.AppSettings["myKey"];
if (!String.IsNullOrEmpty(s))
{
    // Key exists
}
else
{
    // Key doesn't exist
}
if (ConfigurationManager.AppSettings.AllKeys.Contains("myKey"))
{
    // Key exists
}
else
{
    // Key doesn't exist
}

безопасно возвращенное значение по умолчанию через generics и LINQ.

public T ReadAppSetting<T>(string searchKey, T defaultValue)
{
    if (ConfigurationManager.AppSettings.AllKeys.Any(key => key == searchKey))
    {
        try {       // see if it can be converted
            var converter = TypeDescriptor.GetConverter(typeof(T));
            if (converter != null) {
                defaultValue = (T)converter.ConvertFromString(ConfigurationManager.AppSettings.GetValues(searchKey).First());
            }
        } catch { } // nothing to do, just return default
    }
    return defaultValue;
}

используется следующим образом:

string LogFileName = ReadAppSetting("LogFile","LogFile");
double DefaultWidth = ReadAppSetting("Width",1280.0);
double DefaultHeight = ReadAppSetting("Height",1024.0);
Color DefaultColor = ReadAppSetting("Color",Colors.Black);

Я думаю, что выражение LINQ может быть лучше:

   const string MyKey = "myKey"

   if (ConfigurationManager.AppSettings.AllKeys.Any(key => key == MyKey))
          {
              // Key exists
          }

Если ключ, который вы ищете нет в файле config, вы не сможете преобразовать его в строку .ToString () потому что значение будет null, и вы получите ошибку "ССЫЛКА на объект не установлена на экземпляр объекта". Лучше всего сначала посмотреть, существует ли значение, прежде чем пытаться получить строковое представление.

if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["myKey"]))
{
    String myKey = ConfigurationManager.AppSettings["myKey"].ToString();
}

или, как предложил код обезьяны:

if (ConfigurationSettings.AppSettings["myKey"] != null)
{
// Now do your magic..
}

var isAlaCarte = ConfigurationManager.Параметр appsettings.Все ключи.Содержит ("IsALaCarte") & & bool.Разобрать(Диспетчер Конфигураций.Параметр appsettings.Get ("IsALaCarte"));

верхние параметры дают гибкие для всех способов, Если вы знаете тип ключа попробуйте разобрать их bool.TryParse(ConfigurationManager.AppSettings["myKey"], out myvariable);