пыльник упрощена версия кода у меня есть:Generic проблемы фабрики класса
public interface IControl<T>
{
T Value { get; }
}
public class BoolControl : IControl<bool>
{
public bool Value
{
get { return true; }
}
}
public class StringControl : IControl<string>
{
public string Value
{
get { return ""; }
}
}
public class ControlFactory
{
public IControl GetControl(string controlType)
{
switch (controlType)
{
case "Bool":
return new BoolControl();
case "String":
return new StringControl();
}
return null;
}
}
Проблема заключается в методе GetControl из ControlFactory класса. Потому что он возвращает IControl, и у меня есть только IControl < T>, который является общим интерфейсом. Я не могу предоставить T, потому что в случае Bool это будет bool, а в случае String это будет строка.
Любая идея, что мне нужно сделать, чтобы она работала?
@ Vadim - Я настоятельно рекомендую вам использовать решение Daniel, где он сравнивает типы, а не использует строки. Использование имени типа более подвержено ошибкам. –
@Jon B: вы правы; сравнение типов обеспечит более надежный код. Я просто обновил оригинальный код Вадима для работы. Подход Даниила - лучший способ пойти. –