web-dev-qa-db-fra.com

Comment vérifier si une clé appSettings existe?

Comment vérifier si un paramètre d'application est disponible?

c'est-à-dire app.config

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

et dans le fichier de code

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

MSDN: Configuration Manager.AppSettings

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

ou

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

En toute sécurité retourné valeur par défaut via génériques et LINQ.

public T ReadAppSetting<T>(string searchKey, T defaultValue, StringComparison compare = StringComparison.Ordinal)
{
    if (ConfigurationManager.AppSettings.AllKeys.Any(key => string.Compare(key, searchKey, compare) == 0)) {
        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 the defaultValue
    }
    return defaultValue;
}

Utilisé comme suit:

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

Si la clé que vous recherchez n'est pas présente dans le fichier config, vous ne pourrez pas la convertir en chaîne avec .ToString () car la valeur sera null et vous obtiendrez une "référence d'objet non définie à une instance d'un objet "erreur. Il est préférable de vérifier d'abord si la valeur existe avant d'essayer d'obtenir la représentation sous forme de chaîne.

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

Ou, comme le suggère Code Monkey:

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

Les options supérieures donnent de la souplesse à toutes les manières, si vous connaissez le type de clé, essayez de les analyser bool.TryParse(ConfigurationManager.AppSettings["myKey"], out myvariable);

2
sam

var isAlaCarte = ConfigurationManager.AppSettings.AllKeys.Contains ("IsALaCarte") && bool.Parse (ConfigurationManager.AppSettings.Get ("IsALaCarte"));

2
Johnny Trinh

Je pense que l'expression LINQ peut être la meilleure:

   const string MyKey = "myKey"

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

J'ai aimé réponse de codebender , mais il fallait que cela fonctionne en C++/CLI. C'est ce que j'ai fini avec. Il n'y a pas d'utilisation de LINQ, mais fonctionne.

generic <typename T> T MyClass::ReadAppSetting(String^ searchKey, T defaultValue) {
  for each (String^ setting in ConfigurationManager::AppSettings->AllKeys) {
    if (setting->Equals(searchKey)) { //  if the key is in the app.config
      try {                           // see if it can be converted
        auto converter = TypeDescriptor::GetConverter((Type^)(T::typeid)); 
        if (converter != nullptr) { return (T)converter->ConvertFromString(ConfigurationManager::AppSettings[searchKey]); }
      } catch (Exception^ ex) {} // nothing to do
    }
  }
  return defaultValue;
}
1
nimchimpsky