C #: Как убедиться, что переменная настроек существует, прежде чем пытаться использовать ее из другой сборки? - PullRequest
11 голосов
/ 10 января 2011

У меня есть следующее:

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

Ответы [ 5 ]

19 голосов
/ 09 января 2014

Если вы используете SettingsPropertyCollection, вам, вероятно, придется зацикливаться и проверять, какие настройки существуют самостоятельно, поскольку у него нет метода Contains.

private bool DoesSettingExist(string settingName)
{
   return Properties.Settings.Default.Properties.Cast<SettingsProperty>().Any(prop => prop.Name == settingName);
}
6 голосов
/ 03 декабря 2011
try
{
    var x = Settings.Default[bonusMalusTypeKey]);
}
catch (SettingsPropertyNotFoundException ex)
{
    // Ignore this exception (return default value that was set)
}
6 голосов
/ 10 января 2011

В зависимости от типа CommomSettings.Default, простая проверка нуля должна подойти:

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

Если вы хотите проверить ПЕРЕД попыткой получить настройку, вам необходимо опубликовать тип общих настроек.По умолчанию.Это похоже на словарь, поэтому вы можете сойти с рук:

if(CommonSettings.Default.ContainsKey(str))
{
    DoSomethingElse(CommonSettings.Default[str]);
}
5 голосов
/ 07 июля 2011

Вот как вы справляетесь с этим:

if(CommonSettings.Default.Properties[str] != null)
{
    //Hooray, we found it!
}
else
{
    //This is a 'no go'
}
0 голосов
/ 10 января 2011

Вы можете сделать следующее:

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

Это обеспечит существование настройки - вы можете пойти немного дальше и попытаться поймать точное исключение - например, catch (IndexOutOfBoundsException ex)

...