我在c#项目中添加了更多设置。我有Settings.settings,Settings1.settings,...每个都有许多类型的相同值设置.. id - string,point - Point(),size - Size() 但价值观不同。
示例:
Settings.settings有数据:
id = 'first'; string
point = 10@10; Point()
size = 111; 111; Size()
Settings1.settings有数据:
id = 'second'; string
point = 20@20; Point()
size = 222; 222; Size()
我选择程序将在开始时使用的设置(通过从列表框中选择设置ID)。
然后,我希望获得所选设置的设置值:
Object myPoint = Config.currentPropertiesAt("point");
/Config class/ -> public static Object currentPropertiesAt(string value)
如何从正确的设置中获取该值?
我如何知道返回的对象类型?这就是我使用Object的原因,但这可能不行。
什么是更好的方式?
答案 0 :(得分:1)
我建议创建一个包含您需要的所有设置的接口ISettings:
interface ISettings
{
string Id { get; }
Point Point { get; }
Size Size { get; }
...
}
然后定义与您生成的设置类匹配的部分类:
internal sealed partial class Settings : ISettings { }
internal sealed partial class Settings1 : ISettings { }
internal sealed partial class Settings2 : ISettings { }
...
因为生成的Settings1.Designer.cs
类实现了实际的接口,所以没有什么可以在这里添加的。
现在,在您的代码中,您始终可以引用ISettings来获取设置的值:
var currentSettings = Config.CurrentSettings; // returns ISettings
var id = currentSettings.Id;
在您希望选择使用哪些设置(1,2,...)的代码中(我假设这是在您的Config类中),您将返回正确的类:
class Config
{
// Select the correct object using a string, or enum, or int, or ...
public static ISettings SetCurrentSettings(string selectedSettings)
{
switch (selectedSettings)
{
default:
case "Settings":
CurrentSettings = Properties.Settings.Default;
break;
case "Settings1":
CurrentSettings = Properties.Settings1.Default;
break;
case "Settings2":
CurrentSettings = Properties.Settings2.Default;
break;
}
return CurrentSettings;
}
public static ISettings CurrentSettings { get; private set; }
}