繁体   English   中英

泛型类的通用集合?

[英]Generic collection of generic classes?

我有一个从数据库中填写的类:

public class Option<T>
{
  public T Value { get; set; }
  public T DefaultValue { get; set; }
  public List<T> AvailableValues { get; set; }
}

我想要一个他们的集合:

List<Option<T>> list = new List<Option<T>>();
Option<bool> TestBool = new Option<bool>();
TestBool.Value = true;
TestBool.DefaultValue = false;
list.Add(TestBool);
Option<int> TestInt = new Option<int>();
TestInt.Value = 1;
TestInt.DefaultValue = 0;
list.Add(TestInt);

它似乎不起作用。 想法?

我怀疑你真的想要一个非泛型基类 - 否则在不同的Option<T>闭合类型之间没有任何共同点。

我理解你要做的是什么,但.NET泛型不允许你表达这种关系。 这就像试图从Type到该Type的实例做一个地图......它只是不会飞:(

您必须提供类型而不是模板参数:

List<Option<T>> list = new List<Option<T>>();

List<Option<bool>> list = new List<Option<bool>>();

Option<int>类型的项添加到同一个列表将不起作用,但这是一个与我上面提到的问题不同的问题。

第一行你必须说T型是什么。

List<Option<bool>> list = new List<Option<bool>>();

而且你也不能把TestInt放在这个列表中......

你正在做的只适用于异构列表。

List<T>是类型T的同类列表,意味着所有元素必须是T类型。 因为Option<bool>Option<int>没有除了object之外的共同祖先,所以除非使用List<object>或旧的ArrayList ,否则它们都不能这样做,两者都充当异构列表。

考虑从该列表中检索对象:

list.Add(TestBool);
list.Add(TestInt);

for(int i = 0; i < list.Count; i++)
{
   list[i].Value // <- what's the type of this?
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM