1

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

有什么更好的方法?

4

1 回答 1

1

我建议创建一个 Interface 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; }
}
于 2013-12-13T15:35:04.500 回答