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
}
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
}
if (ConfigurationManager.AppSettings.AllKeys.Contains("myKey"))
{
// Key exists
}
else
{
// Key doesn't exist
}
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);
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..
}
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);
var isAlaCarte = ConfigurationManager.AppSettings.AllKeys.Contains ("IsALaCarte") && bool.Parse (ConfigurationManager.AppSettings.Get ("IsALaCarte"));
Je pense que l'expression LINQ peut être la meilleure:
const string MyKey = "myKey"
if (ConfigurationManager.AppSettings.AllKeys.Any(key => key == MyKey))
{
// Key exists
}
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;
}