У меня следующий тип, где T
должно быть только int
, double
, string
и datetime
. Однако использование ограничения на class
было бы слишком широким.
public class Field<T> where T : class
{
public int Tag { get; set; }
public T Value { get; set; }
}
Возможные решения, которые приходят мне в голову:
- Добавить конструктор, который выполняет проверку (
if ((typeof(T) != typeof(string)) ...
)
- Измените класс на абстрактный и переместите
Value
в конкретный реализующий класс. Это, однако, приведет к появлению нескольких дополнительных типов, таких как StringField : Field
, DateTimeField : Field
и т. Д.
Кроме того, я бы хотел более подробно рассказать о свойстве Tag
и заменить его на enum, что гарантирует использование только значений предварительно определенного диапазона. Однако такой подход может привести к (крошечным) накладным расходам, поскольку мне нужно создать экземпляр представления Field
в виде строки.
Какую модель лучше выбрать? Что-то мне не хватает? Заранее спасибо