Я хочу иметь класс времени и значений, где значением может быть любой тип, а затем поместить его в какую-то коллекцию.
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...
}