Я часто использую такие вещи:
private static Dictionary<Edition, Func<userconfig, TestEdition>> _factories =
new Dictionary<Edition, Func<userconfig, TestEdition>>()
{
{ Edition.typea, c => new TestEdition3(c) },
{ Edition.typeb, c => new TestEdition4(c) },
}
private static TestEdition GetCurrentEdition(userconfig config)
{
if (_factories.ContainsKey(config.Edition))
{
return _factories[config.Edition](config);
}
return new UnsupportedEdition(config);
}
Огромным преимуществом является то, что вы можете настраивать и расширять Dictionary<Edition, Func<userconfig, TestEdition>>
во время выполнения.