我有一个名为A
的属性,并且已通过Visual Studio中的“属性设置”窗口(项目→属性→设置)将其设置为值AAA
。
我可以使用此循环获得属性A
的原始值。如果更改值,例如NewValue
,则可以使用以下代码获取新值:
Properties.Settings.Default.A
但是,在循环中,如果不使用语法,我不知道如何获取当前属性值:
Properties.Settings.Default.VariableName
例如:
Properties.Settings.Default.A= "NewValue";
Properties.Settings.Default.Save();
foreach (SettingsProperty _currentProperty in Properties.Settings.Default.Properties)
{
Console.WriteLine(_currentProperty.Name + "," + _currentProperty.DefaultValue.ToString());
}
上面的循环显示了属性的原始值(旧的默认值是AAA
)。
我已经检查了user.config
文件并确保它显示了NewValue
。
我假设必须有某种方式使用我不知道的属性或方法来引用当前值(也许我应该迭代另一个集合?)。
问题是,如何在上面的foreach
循环中显示此新值?
查询SettingsPropertyValueCollection时,将在SettingsProvider类中返回当前的Properties.Settings值(如果未为设置定义提供程序,则使用默认提供程序LocalFileSettingsProvider)。
当前代码正在修改设置的值,然后在将设置保存到本地存储之后检查这些值。该代码迭代Properties.Settings.Default.Properties
集合(与ApplicationSettingsBase.Properties属性相对应),该SettingsPropertyCollection集合包含SettingsProperty对象,这些对象在内部用于表示配置属性的元数据。
此类只能返回相关设置的默认值。
要检查与“属性设置”关联的当前值,代码应改为迭代由SettingsPropertyValueCollection
属性返回的上述ApplicationSettingsBase.PropertyValues,该属性枚举SettingsPropertyValue
对象。这些对象的PropertyValue属性返回当前分配给该设置的运行时值。
要返回当前值,可以在以下位置修改代码:
foreach (SettingsPropertyValue prop in Properties.Settings.Default.PropertyValues) {
Console.WriteLine($"{prop.Name} -> {prop.PropertyValue}");
}
[关于应用程序设置的一些注意事项:
Application Settings分为两个主要类别:
Application
范围中的设置)只读,没有本地存储关联,因此无法在运行时更改。这些设置存储在app.config
文件中,该文件在构建项目时复制到[Application].exe.config
文件中。用户设置(User
范围中的设置)(适用于Visual Studio 2017+)这些设置与“应用程序”设置一起存储,但是具有关联的本地存储文件,用于存储用户(或“应用程序”)在运行时可以更改的值:2.1存储在当前用户配置文件中的user.config
文件[User]/AppData/Local/[CompanyName]/[ProductName].exe_<hash>/[Assembly Version]
部分,如果设置的Roaming
属性设置为false
。2.2 user.config
文件存储在当前用户配置文件中[User]/AppData/Roaming/[CompanyName]/[ProductName]/[File Version]
部分,如果将设置Roaming
属性设置为true
。
User
范围内的原始设置值Default
值,在为该设置分配了新值时不会被修改。
用户范围内的设置可以使用ApplicationSettingsBase.Save()方法保存在运行时分配的新值:
Properties.Settings.Default.Save();
应用程序可以使用ApplicationSettingsBase.Reload()方法重新加载上次保存的值(也许是放弃最近的更改:
Properties.Settings.Default.Reload();
要放弃对用户设置所做的所有更改,可以使用ApplicationSettingsBase.Reset()方法将设置重置为默认值:
Properties.Settings.Default.Reset();