C# - 在一个属性中获取和设置多个值的有效方法

时间:2017-10-31 09:03:53

标签: c# properties

我想获得一些关于在一个属性中获取和设置多个值的建议。我有很多相同的属性,可以根据所选的配置文件从应用程序设置获取并设置int值(因此将从getter和setter中的应用程序设置中检索该值,新值将保存到应用程序设置中。)

目前,所有属性都类似于以下示例代码:

public int NumberValue
{
    get 
    { 
        if (_profile == MainProfile.ProfileOne)
        {
            return AppSettings.NumberValue1; 
        }
        else if(_profile == MainProfile.ProfileTwo)
        {
            return AppSettings.NumberValue2; 
        }
        else
        {
            return AppSettings.NumberValue3;  
        }
    }
    set
    {
        if (_profile == MainProfile.ProfileOne)
        {
            AppSettings.NumberValue1 = value; 
        }
        else if(_profile == MainProfile.ProfileTwo)
        {
            AppSettings.NumberValue2 = value;
        }
        else
        {
            AppSettings.NumberValue3 = value; 
        }

        SaveAppSettings();
        NotifyPropertyChanged();
    }
}

我想知道是否有一种有效的方法可以更有效地重写这些属性。

1 个答案:

答案 0 :(得分:2)

一种方法可能是让您的配置更抽象。在您的设置和业务逻辑之间实现一个将消耗这些值的层。 这个层应该处理配置文件并返回你需要的东西,而不是属性getter和setter中的很多if-else-switch,把它们放到一个对象中。

新图层可能只是Configuration对象,需要初始化MainProfile并实现IConfiguration接口,提供GetNumberValueSaveNumberValue方法。 IConfiguration的实现将包含您在实际getter和setter方法中的逻辑。 现在,这个Configuration对象可以在你的getter和setter中使用,而不是if-else-switches。

public interface IConfiguration
{
    int GetNumberValue();

    void SaveNumberValue(int number);
}

根据上面可能的解决方案,您可以向接口添加方法SetProfile,并在逻辑中决定应该存储或读取值的配置文件。

也可以创建单独的类来表示ConfigurationSections文件中的不同App.config,或者为每个配置文件创建一个自己的App.config文件。然后Configuration对象可以处理加载必要的文件。