【发布时间】:2013-12-17 09:42:11
【问题描述】:
我想知道这 3 个 Settings.Default.<PropertyName> 、 Settings.Default.Properties 和 Settings.Default.PropertyValues 之间的区别。
我有一个 wpf 窗口,可以根据这些 Settings 动态生成控件,然后可以更新 Settings 值
我第一次使用 Settings.Default.Properties Collection ,但我相信它不会更新用户文件夹中的配置或物理设置文件中的值。
所以我用反射来更新,但我还是不知道如何获取
反射的值。 (可能还需要研究这个)
Settings.Default.GetType().GetProperty(propertyName,
typeof(string)).SetValue(source, fileDialog.FileName, null);
Settings.Default.Save();
Settings.Default.Reload();
然后我看到Settings.Default.PropertyValues 有最新的更新值,并在调试模式下进行了测试,
string properyValue =
Convert.ToString(Settings.Default.PropertyValues[propertyName].PropertyValue);
奇怪的是,当我创建安装程序和 exe 时,它们似乎没有工作。仍然要弄清楚到底错在哪里。 如果我使事情复杂化并遗漏了什么,有人可以指出我吗?
更新 1
在 nflash 的评论之后,我检查了文件的创建时间。当应用程序为所有 3 启动时,该文件没有创建,我什至在开始时就调用了 Settings.Default.Save 但它没有创建文件 Settings.Default.<PropertyName> , Settings.Default.Properties 被实例化但 Settings.Default.PropertyValues 没有。
只有在设置和保存中进行更改后,才会创建文件。
更新2
现在我提出的解决方案是
source.GetType().GetProperty(setting.Name, typeof(string))
.SetValue(source, "NewValue", null);
正如 nflash 所提到的,它是类型安全的(尽管反射有它的缺点)。但是 Settings.Default.<PropertyName> 被同步并正确实例化。
【问题讨论】:
-
请注意,无论出于何种原因,在您从
Settings对象检索属性值之前,不会填充PropertyValues集合。您检索哪个属性并不重要......您只需要获取一个,以强制类填充值。见stackoverflow.com/questions/89149/…