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

问题描述 投票:2回答:1

我有一个名为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循环中显示此新值?

c# winforms application-settings
1个回答
2
投票

查询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分为两个主要类别:

  1. 应用程序设置(Application范围中的设置)只读,没有本地存储关联,因此无法在运行时更改。这些设置存储在app.config文件中,该文件在构建项目时复制到[Application].exe.config文件中。
  2. 用户设置(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();
    
© www.soinside.com 2019 - 2024. All rights reserved.