代码之家  ›  专栏  ›  技术社区  ›  dannyhut

C#应用程序设置。关于用户V的应用范围的快速问题

  •  -1
  • dannyhut  · 技术社区  · 2 年前

    我刚刚查看了Microsoft Social Network中关于如何使用应用程序设置的一个示例,即:

    public bool IsUSer(SettingsProperty Setting)
            {
                bool flag = Setting.Attributes[typeof(UserScopedSettingAttribute)] is UserScopedSettingAttribute;
                bool flag1 = Setting.Attributes[typeof(ApplicationScopedSettingAttribute)] is ApplicationScopedSettingAttribute;
    
                if (flag && flag2)
                {
                    throw new ConfigurationErrorsException(SR.GetString("BothScopeAttributes"));
                }
                if (!flag && !flag2)
                {
                    throw new ConfigurationErrorsException(SR.GetString("NoScopeAttributes"));
                }
                return flag;
            }
    

    这将检查设置是否同时属于用户范围和应用程序范围,或者两者都不属于。这两种情况是否有可能发生。当然,API首先不会允许这种情况发生。我们应该检查一下这个,还是这个例子有点过头了。我知道这更像是一种讨论性的咆哮,但真的,这肯定不会发生吗?

    链接到示例: https://social.msdn.microsoft.com/Forums/en-US/4c0d2eae-2f0b-41c8-bb60-c4b0ffd3cd0b/how-to-retrieve-usersettings-v-defaultsettings-c-vbe2008?forum=netfxbcl

    谢谢 丹尼

    1 回复  |  直到 2 年前
        1
  •  0
  •   ProgrammingLlama Raveena Sarda    2 年前

    [UserScopedSetting] [ApplicationScopedSetting] 属性 所以你可以这样使用它们:

    public class MyUserSettings : ApplicationSettingsBase
    {
        [UserScopedSetting()]
        [DefaultSettingValue("white")]
        public Color BackgroundColor
        {
            get
            {
                return ((Color)this["BackgroundColor"]);
            }
            set
            {
                this["BackgroundColor"] = (Color)value;
            }
        }
    }
    

    ( Source 对于上述代码)

    如果您参考 this question ,您将看到无法防止两个属性同时出现。因此,您显示的代码实际上是针对以下两种情况之一进行保护:

    1-应用两个属性:

    public class MyUserSettings : ApplicationSettingsBase
    {
        [UserScopedSetting()]
        [ApplicationScopedSetting()]
        [DefaultSettingValue("white")]
        public Color BackgroundColor
        {
            get
            {
                return ((Color)this["BackgroundColor"]);
            }
            set
            {
                this["BackgroundColor"] = (Color)value;
            }
        }
    }
    

    2-未应用任何属性:

    public class MyUserSettings : ApplicationSettingsBase
    {
        [DefaultSettingValue("white")]
        public Color BackgroundColor
        {
            get
            {
                return ((Color)this["BackgroundColor"]);
            }
            set
            {
                this["BackgroundColor"] = (Color)value;
            }
        }
    }
    

    因此,最终需要检查是否应用了这两个属性中的一个。