Как быть более конкретным в общих ограничениях? - PullRequest
0 голосов
/ 26 июня 2019

У меня следующий тип, где T должно быть только int, double, string и datetime. Однако использование ограничения на class было бы слишком широким.

public class Field<T> where T : class 
{
    public int Tag { get; set; }

    public T Value { get; set; }
}

Возможные решения, которые приходят мне в голову:

  1. Добавить конструктор, который выполняет проверку (if ((typeof(T) != typeof(string)) ...)
  2. Измените класс на абстрактный и переместите Value в конкретный реализующий класс. Это, однако, приведет к появлению нескольких дополнительных типов, таких как StringField : Field, DateTimeField : Field и т. Д.

Кроме того, я бы хотел более подробно рассказать о свойстве Tag и заменить его на enum, что гарантирует использование только значений предварительно определенного диапазона. Однако такой подход может привести к (крошечным) накладным расходам, поскольку мне нужно создать экземпляр представления Field в виде строки.

Какую модель лучше выбрать? Что-то мне не хватает? Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...