2011-01-10 6 views
8

Tengo el siguiente:C#: ¿Cómo asegurarse de que exista una variable de configuración antes de intentar usarla desde otro ensamblado?

using CommonSettings = MyProject.Commons.Settings; 

public class Foo 
{ 
    public static void DoSomething(string str) 
    { 
     //How do I make sure that the setting exists first? 
     object setting = CommonSettings.Default[str]; 

     DoSomethingElse(setting); 
    } 
} 
+0

https://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx –

Respuesta

5

Dependiendo de qué tipo CommomSettings.Default es decir, una simple comprobación nula debe estar bien:

if(setting != null) 
    DoSomethingElse(setting); 

Si desea comprobar antes de tratar de recuperar el entorno, lo que necesita para publicar el Tipo de ajustes comunes. Por defecto. Parece un diccionario por lo que podría ser capaz de salirse con la suya:

if(CommonSettings.Default.ContainsKey(str)) 
{ 
    DoSomethingElse(CommonSettings.Default[str]); 
} 
+0

pensé que era más preguntando cómo _ensure_ que el ajuste está presente, no sólo para comprobar si está presente. –

+1

@Uwe - Puede que tengas razón. No podría decir por la redacción en la pregunta del OP. También agregué algo para ese caso. –

+1

Sin embargo, se crea un archivo Settings.settings ... No creo que sea un tipo de diccionario, ya que 'CommonSettings.Default.ContainsKey (...)' no está en el intellisense. – michael

0

Se podría hacer lo siguiente:

public static void DoSomething(string str) 
{ 
    object setting = null; 

    Try 
    { 
     setting = CommonSettings.Default[str]; 
    } 
    catch(Exception ex) 
    { 
     Console.out.write(ex.Message); 
    } 

    if(setting != null) 
    { 
     DoSomethingElse(setting); 
    } 
} 

Esto aseguraría existe el ajuste - que podría ir un poco más allá y tratar y coger el excetion exacta - por ejemplo, la captura (ex IndexOutOfBoundsException)

+0

Acabo de ver su actualización Justin - Su solución parece mucho más limpia :) – GaryT

5

Esta es la forma de tratar con él:

if(CommonSettings.Default.Properties[str] != null) 
{ 
    //Hooray, we found it! 
} 
else 
{ 
    //This is a 'no go' 
} 
6
try 
{ 
    var x = Settings.Default[bonusMalusTypeKey]); 
} 
catch (SettingsPropertyNotFoundException ex) 
{ 
    // Ignore this exception (return default value that was set) 
} 
+0

¡Alguna descripción sería útil! – Parris

15

Si está utilizando un SettingsPropertyCollection tiene que hacer un bucle y comprobar qué ajustes existen usted mismo, parece que no tiene ningún método de Contiene.

private bool DoesSettingExist(string settingName) 
{ 
    return Properties.Settings.Default.Properties.Cast<SettingsProperty>().Any(prop => prop.Name == settingName); 
} 
+1

thx salle55. buen trabajo. Para aquellos que no tienen usando System.Configuration , agregue el prefijo System.Configuration. a SettingsProperty> – gg89

Cuestiones relacionadas