2011-01-10 7 views
8

Ich habe folgendes:C#: Wie kann sichergestellt werden, dass eine Einstellungsvariable vorhanden ist, bevor Sie versuchen, sie von einer anderen Assembly zu verwenden?

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 –

Antwort

5

Je nachdem, welche Art CommomSettings.Default ist, eine einfache NULL-Prüfung sollte in Ordnung sein:

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

Wenn Sie bevor Sie versuchen, die Einstellung überprüfen abrufen möchten, müssen Sie um den Typ von CommonSettings.Default zu veröffentlichen. Es sieht aus wie ein Wörterbuch, so dass Sie bekommen vielleicht in der Lage weg mit:

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

Ich dachte, er war mehr zu fragen, wie man _ensure_, dass die Einstellung vorhanden ist, nicht nur zu Überprüfen Sie, ob es vorhanden ist. –

+1

@Uwe - Sie könnten Recht haben. Das konnte ich an dem Wortlaut der Frage des OP nicht erkennen. Ich habe auch etwas für diesen Fall hinzugefügt. –

+1

Es ist jedoch eine Settings.settings-Datei erstellt ... Ich glaube nicht, dass es ein Dictionary-Typ ist, da 'CommonSettings.Default.ContainsKey (...)' nicht in der Intellisense ist. – michael

0

Sie Folgendes tun können:

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); 
    } 
} 

Dies würde sicherstellen, dass die Einstellung vorhanden - Sie etwas weiter gehen und versuchen, und die genaue excetion fangen - zB catch (IndexOutOfBoundsException ex)

+0

Just gesehen Ihr Update Justin - Ihre Lösung sieht viel sauberer :) – GaryT

5

Dies ist, wie Sie damit umgehen:

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

Einige Beschreibung wäre nützlich! – Parris

15

Wenn Sie eine SettingsPropertyCollection verwenden, müssen Sie eine Schleife erstellen und prüfen, welche Einstellungen selbst existieren, da es keine Contains-Methode gibt.

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

thx salle55. Gute Arbeit. Für diejenigen, die keine mit System.Configuration haben, bitte Präfix System.Configuration hinzufügen. zu SettingsProperty> – gg89

Verwandte Themen