如何使用循环在 运行 时间获取 属性 设置的当前值

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 个主要类别:

  1. 应用程序设置(Application范围内的设置)
    只读,没有关联本地存储,因此无法在 运行 时更改。 这些设置存储在 app.config 文件中,在构建项目时将其复制到 [Application].exe.config 文件.

  2. 用户设置(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();