Может ли коллекция использовать дженерики без указания типа - PullRequest
0 голосов
/ 20 января 2019

Я хочу иметь класс времени и значений, где значением может быть любой тип, а затем поместить его в какую-то коллекцию.

public class TimeValue<T> {
    public DateTime TimeStamp { get; set; } = DateTime.Now;
    public T Value { get; set; } = default(T);

    TimeValue() { } // constructors
    TimeValue(DateTime ts, T val) { TimeStamp = ts; Value = val; }
    TimeValue(TimeValue<T> tv) { TimeStamp = tv.TimeStamp; Value = tv.Value; }  
}

Этот старый ответ Коллекция универсальных типов, на который ссылается Различные универсальные T в одной и той же коллекции требует помещения Типа в класс и использования Dictionary, и я не хочу смешивать типы в коллекции, как это делает вопрос-референт.

Я бы хотел указать набор типов (как показано ниже), который указывает только тип для значения.Тогда коллекция будет по существу TimeValue записей:

TimeValueCollection<double> timeDoubles;
TimeValueCollection<int> timeInts;

После комментария Джонни, это то, что у меня есть.Не уверен, как будет работать IEquatable<TimeValue<T>> или какая коллекция подойдет лучше всего.

public class TimeValueCollection<T> : ICollection<TimeValue<T>> {
    ICollection<TimeValue<T>> items;

    public TimeValueCollection() => items = new List<TimeValue<T>>();
    // todo:
    // properties matching collection chosen.
    // methods matching collection chosen
}

Со вторым комментарием Джонни я не вижу никакой выгоды в конструкции, которую я преследовал по этому поводу:

public class TimeValueCollection<DateTime,T> : IDictionary<DateTime,T>
{
    IDictionary<DateTime, T> items;
    public TimeValueCollection() => items = new Dictionary<DateTime, T>();
    private Type typeName = typeof(T);
    public Type ValueType { get => typeName; }
    public T this[DateTime key] { get => items[key]; set => items[key] = value; }
    // todo: remaining properties and methods... 
}
...