You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断Settings中是否存在指定属性?(运行时添加属性场景)

如何在运行时判断Settings属性是否存在并安全添加

你碰到的这个问题确实挺常见的——直接用索引器访问不存在的Settings属性时,它不会返回null,而是直接抛出异常,所以得换个思路来检查属性是否存在。

其实Properties.Settings.Default有一个Properties集合,它包含了所有已注册的设置属性,我们可以通过这个集合来判断目标属性是否存在,完全不会触发异常:

using System.Linq;
using System.Configuration;

// 获取Settings实例
var settings = Properties.Settings.Default;

// 检查名为"x"的属性是否存在
bool isPropertyExists = settings.Properties
    .Cast<SettingsProperty>()
    .Any(prop => prop.Name == "x");

if (!isPropertyExists)
{
    // 执行你找到的属性添加逻辑
    var newProperty = new SettingsProperty("x")
    {
        DefaultValue = -1,
        IsReadOnly = false,
        PropertyType = typeof(int),
        Provider = settings.Providers["LocalFileSettingsProvider"],
    };
    newProperty.Attributes.Add(
        typeof(UserScopedSettingAttribute), 
        new UserScopedSettingAttribute()
    );
    
    // 将新属性添加到集合中
    settings.Properties.Add(newProperty);
    
    // 别忘了保存设置,否则重启程序后新增的属性会丢失
    settings.Save();
}

补充说明

  • SettingsPropertyCollection本身不是泛型集合,所以需要用Cast<SettingsProperty>()把它转换成可枚举的泛型集合,才能使用LINQ的Any()方法进行判断。
  • 添加完属性后一定要调用Save()方法,这样新增的设置才会被持久化到本地配置文件中,下次启动程序时才能读取到。

内容的提问来源于stack exchange,提问作者Damn Vegetables

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:39:01