15

私は次のものを持っています:

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

5 に答える 5

29

を使用しているSettingsPropertyCollection場合は、Contains-method がないため、自分でどの設定が存在するかをループして確認する必要があります。

private bool DoesSettingExist(string settingName)
{
   return Properties.Settings.Default.Properties.Cast<SettingsProperty>().Any(prop => prop.Name == settingName);
}
于 2014-01-09T13:02:13.680 に答える
6
try
{
    var x = Settings.Default[bonusMalusTypeKey]);
}
catch (SettingsPropertyNotFoundException ex)
{
    // Ignore this exception (return default value that was set)
}
于 2011-12-03T19:33:19.247 に答える
6

タイプによってCommomSettings.Defaultは、単純な null チェックで問題ありません。

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

設定を取得する前に確認したい場合は、CommonSettings.Default の Type を投稿する必要があります。辞書のように見えるので、次のように回避できる場合があります。

if(CommonSettings.Default.ContainsKey(str))
{
    DoSomethingElse(CommonSettings.Default[str]);
}
于 2011-01-10T14:29:05.420 に答える
5

これはあなたがそれに対処する方法です:

if(CommonSettings.Default.Properties[str] != null)
{
    //Hooray, we found it!
}
else
{
    //This is a 'no go'
}
于 2011-07-06T20:23:34.303 に答える
0

次のことができます。

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)

于 2011-01-10T14:39:13.053 に答える