C#:在尝试从另一个程序集中使用它之前,如何确保设置变量存在?

mic*_*ael 12 c# settings settings.settings

我有以下内容:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

sal*_*e55 24

如果您正在使用a SettingsPropertyCollection,则必须循环并检查自己存在哪些设置,因为它没有任何Contains方法.

private bool DoesSettingExist(string settingName)
{
   return Properties.Settings.Default.Properties.Cast<SettingsProperty>().Any(prop => prop.Name == settingName);
}
Run Code Online (Sandbox Code Playgroud)

  • thx salle55。做得好。对于那些没有使用System.Configuration的用户,请添加前缀System.Configuration。到SettingsProperty&gt; (2认同)

Jus*_*ner 6

根据类型CommomSettings.Default,简单的空检查应该没问题:

if(setting != null)
    DoSomethingElse(setting);
Run Code Online (Sandbox Code Playgroud)

如果要在尝试检索设置之前检查,则需要发布CommonSettings.Default类型.它看起来像一个字典,所以你可以逃脱:

if(CommonSettings.Default.ContainsKey(str))
{
    DoSomethingElse(CommonSettings.Default[str]);
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于Properties.Settings.Default.@ Salle55提供了一个很好的解决方案,可以使用下面的Properties.Settings.Default. (2认同)

小智 6

try
{
    var x = Settings.Default[bonusMalusTypeKey]);
}
catch (SettingsPropertyNotFoundException ex)
{
    // Ignore this exception (return default value that was set)
}
Run Code Online (Sandbox Code Playgroud)


小智 5

这是你如何处理它:

if(CommonSettings.Default.Properties[str] != null)
{
    //Hooray, we found it!
}
else
{
    //This is a 'no go'
}
Run Code Online (Sandbox Code Playgroud)