我想获得一些关于在一个属性中获取和设置多个值的建议。我有很多相同的属性,可以根据所选的配置文件从应用程序设置获取并设置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();
}
}
我想知道是否有一种有效的方法可以更有效地重写这些属性。
答案 0 :(得分:2)
一种方法可能是让您的配置更抽象。在您的设置和业务逻辑之间实现一个将消耗这些值的层。 这个层应该处理配置文件并返回你需要的东西,而不是属性getter和setter中的很多if-else-switch,把它们放到一个对象中。
新图层可能只是Configuration
对象,需要初始化MainProfile
并实现IConfiguration
接口,提供GetNumberValue
和SaveNumberValue
方法。 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
对象可以处理加载必要的文件。