如何使用循环在 运行 时间获取 属性 设置的当前值
How to get the current value of a Property Setting at run-time using a loop
我有一个名为 A
的 属性,它通过 Visual Studio 中的属性设置 Window 设置为值 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
循环中显示这个新值?
当前 Properties.Settings
值在 SettingsPropertyValueCollection Class when querying a SettingsProvider (if no Provider is defined for a setting, the default Provider, LocalFileSettingsProvider 中 return 被使用。
当前代码正在修改设置的值,然后在将设置保存到本地存储后检查这些值。
代码迭代 Properties.Settings.Default.Properties
集合,对应于 ApplicationSettingsBase.Properties property, a SettingsPropertyCollection collection, which contains SettingsProperty 对象,在内部用于表示配置属性的元数据。
此 class 只能 return 关联设置的默认值。
要检查与属性设置关联的当前值,代码应该迭代前面提到的 SettingsPropertyValueCollection
、return 由 ApplicationSettingsBase.PropertyValues 属性 编辑,它枚举了 SettingsPropertyValue
个对象。
这些对象的 PropertyValue 属性 return 是当前分配给设置的 运行 时间值。
为return当前值,然后修改代码即可:
foreach (SettingsPropertyValue prop in Properties.Settings.Default.PropertyValues) {
Console.WriteLine($"{prop.Name} -> {prop.PropertyValue}");
}
关于应用程序设置的一些注意事项:
Application Settings 分为 2 个主要类别:
应用程序设置(Application
范围内的设置)
只读,没有关联本地存储,因此无法在 运行 时更改。
这些设置存储在 app.config
文件中,在构建项目时将其复制到 [Application].exe.config
文件.
用户设置(User
范围内的设置)(适用于Visual Studio 2017+)
这些设置与应用程序设置一起存储,但具有关联的本地存储文件,用于存储用户(或应用程序)可以在 运行 时间更改的值:
2.1 一个user.config
文件存放在
中的当前User profile
[User]/AppData/Local/[CompanyName]/[ProductName].exe_<hash>/[Assembly Version]
部分,如果设置的 Roaming
属性设置为 false
。
2.2 一个user.config
文件存放在
中的当前User profile
[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();
我有一个名为 A
的 属性,它通过 Visual Studio 中的属性设置 Window 设置为值 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
循环中显示这个新值?
当前 Properties.Settings
值在 SettingsPropertyValueCollection Class when querying a SettingsProvider (if no Provider is defined for a setting, the default Provider, LocalFileSettingsProvider 中 return 被使用。
当前代码正在修改设置的值,然后在将设置保存到本地存储后检查这些值。
代码迭代 Properties.Settings.Default.Properties
集合,对应于 ApplicationSettingsBase.Properties property, a SettingsPropertyCollection collection, which contains SettingsProperty 对象,在内部用于表示配置属性的元数据。
此 class 只能 return 关联设置的默认值。
要检查与属性设置关联的当前值,代码应该迭代前面提到的 SettingsPropertyValueCollection
、return 由 ApplicationSettingsBase.PropertyValues 属性 编辑,它枚举了 SettingsPropertyValue
个对象。
这些对象的 PropertyValue 属性 return 是当前分配给设置的 运行 时间值。
为return当前值,然后修改代码即可:
foreach (SettingsPropertyValue prop in Properties.Settings.Default.PropertyValues) {
Console.WriteLine($"{prop.Name} -> {prop.PropertyValue}");
}
关于应用程序设置的一些注意事项:
Application Settings 分为 2 个主要类别:
应用程序设置(
Application
范围内的设置)
只读,没有关联本地存储,因此无法在 运行 时更改。 这些设置存储在app.config
文件中,在构建项目时将其复制到[Application].exe.config
文件.用户设置(
中的当前User profileUser
范围内的设置)(适用于Visual Studio 2017+)
这些设置与应用程序设置一起存储,但具有关联的本地存储文件,用于存储用户(或应用程序)可以在 运行 时间更改的值:
2.1 一个user.config
文件存放在[User]/AppData/Local/[CompanyName]/[ProductName].exe_<hash>/[Assembly Version]
部分,如果设置的
中的当前User profileRoaming
属性设置为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();