多个属性。在C#中设置

时间:2013-12-13 15:08:46

标签: c# settings.settings

我在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的原因,但这可能不行。

什么是更好的方式?

1 个答案:

答案 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; }
}