Вы сталкиваетесь с проблемами, потому что это не очень хорошее использование дженериков. Если параметр универсального типа может быть создан только четырьмя различными способами - string, float, bool и int - тогда это не очень generic . Я ожидаю, что общая вещь может быть любого типа вообще .
Если бы у меня была вещь, которая могла быть только одного из четырех типов, я бы смоделировал ее так:
abstract class ConfigSetting
{ /* shared code here */ }
class TextSetting : ConfigSetting
{ /* Code here to handle string settings */ }
class BooleanSetting : ConfigSetting
{ /* ...
и так далее. Вероятно, я бы тогда дал каждому из них внутренний конструктор и превратил базовый класс в фабрику для производных классов, используя шаблон фабрики.
Используйте дженерики, только если ваше решение действительно дженерик . Например, List<T>
может быть списком всего, что угодно : целых, строк, массивов, словарей, функций и т. Д. Если вещь, которую вы моделируете, имеет небольшое количество возможных типов, просто создайте по одному для каждого типа.