如何判断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
相关产品推荐
相关产品推荐

