gpt4 book ai didi

c# - 当我更改设置的漫游属性时,如何保留用户设置的值?

转载 作者:太空宇宙 更新时间:2023-11-03 12:25:36 24 4
gpt4 key购买 nike

我开始明白我可以使用如下代码保留以前版本的用户设置:

        if (Settings.Default.UpgradeRequired)
{
Settings.Default.Upgrade();
Settings.Default.UpgradeRequired = false;
Settings.Default.Save();
}

但是,如果我更改设置的漫游属性,这似乎不起作用。当我将设置从漫游更改为本地或反之时,有什么方法可以让设置值继续使用而不是重置?

编辑:我研究了使用GetPreviousVersion() 将漫游设置升级到本地设置的可能方法。方法,但它不起作用,因为如果设置的先前版本正在漫游而当前设置未漫游,则根本不会返回先前版本。

重现:

  1. 创建一个名为 MySetting 的设置。
  2. 将 MySetting 的 Roaming 属性更改为 true
  3. 确保 MySetting 的范围是 User
  4. 运行以下代码:

        Console.WriteLine(Settings.Default.GetPreviousVersion("MySetting"));
    Settings.Default.MySetting = "Not the default value.";
    Settings.Default.Save();
  5. 增加程序集版本。
  6. 再次运行代码,注意输出了新值。
  7. 将 MySetting 的 Roaming 属性更改为 false
  8. 再次增加程序集版本。
  9. 再次运行代码,注意输出默认值。

最佳答案

如果您知道哪些属性已从 roaming=true 更改为 roaming=false,那么您可以手动将 SettingsManageabilityAttribute 添加到 SettingsProperty.Attributes 字典中,使用 GetPreviousVersion 检索以前的值,然后从字典中删除属性以进行清理:

Console.WriteLine("Current: {0}", Settings.Default.MySetting);
// we don't see the previous value here...
Console.WriteLine("Previous: {0}", Settings.Default.GetPreviousVersion("MySetting"));
// ...so we manually add the SettingsManageabilityAttribute to it...
var setting = Settings.Default.Properties["MySetting"];
setting.Attributes.Add(typeof(SettingsManageabilityAttribute), new SettingsManageabilityAttribute(SettingsManageability.Roaming));
// ...retrieve the previous value...
Console.WriteLine("Previous: {0}", Settings.Default.GetPreviousVersion("MySetting"));
// ...and then clean up after ourselves by removing the attribute.
setting.Attributes.Remove(typeof(SettingsManageabilityAttribute));
// ...now we don't see the previous value anymore.
Console.WriteLine("Previous: {0}", Settings.Default.GetPreviousVersion("MySetting"));

关于c# - 当我更改设置的漫游属性时,如何保留用户设置的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45193669/

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