gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:16:18 24 4
gpt4 key购买 nike

我有一个名为 A 的属性并将其设置为值 AAA通过 Visual Studio 中的属性设置窗口(项目 → 属性 → 设置)。

我可以获得属性 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 中返回查询 SettingsProvider 时的类(如果没有为设置定义提供者,则使用默认提供者 LocalFileSettingsProvider )。
当前代码正在修改设置的值,然后在设置保存到本地存储后检查这些值。
代码迭代 Properties.Settings.Default.Properties合集,对应ApplicationSettingsBase.Properties属性(property),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();
  • 关于c# - 如何在运行时使用循环获取属性设置的当前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106462/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com