集合可以在不提供Type的情况下使用泛型吗

时间:2019-01-20 01:30:06

标签: c# generics collections

我想要一个时间和值类,其中值可以是任何类型,然后将其放入某种集合中。

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; }  
}

Collection of generic types所引用的这个古老的答案Different Generics T in the same collection需要将Type放入类中并使用Dictionary,我不想将集合中的类型混合为引用问题做。

我想指定集合的​​类型(如下所示),该类型仅指定Value的类型。那么该集合将是本质上是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
}

有了Jonny的第二条评论,我看不出我追求的构造有什么好处:

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... 
}

0 个答案:

没有答案