是否可以将不同类型的通用对象添加到列表中?如下图。
public class ValuePair<T>
{
public string Name { get; set;}
public T Value { get; set;
}
假设我有所有这些对象...
ValuePair<string> data1 = new ValuePair<string>();
ValuePair<double> data2 = new ValuePair<double>();
ValuePair<int> data3 = new ValuePair<int>();
我想将这些对象保存在一个通用列表中。例如
List<ValuePair> list = new List<ValuePair>();
list.Add(data1);
list.Add(data2);
list.Add(data3);
这可能吗?
最佳答案
通常,您必须使用 List<object>
或者创建一个非泛型基类,例如
public abstract class ValuePair
{
public string Name { get; set;}
public abstract object RawValue { get; }
}
public class ValuePair<T> : ValuePair
{
public T Value { get; set; }
public object RawValue { get { return Value; } }
}
然后你可以有一个List<ValuePair>
.
现在,一个异常(exception):C# 4 中的协变/逆变类型。例如,您可以这样写:
var streamSequenceList = new List<IEnumerable<Stream>>();
IEnumerable<MemoryStream> memoryStreams = null; // For simplicity
IEnumerable<NetworkStream> networkStreams = null; // For simplicity
IEnumerable<Stream> streams = null; // For simplicity
streamSequenceList.Add(memoryStreams);
streamSequenceList.Add(networkStreams);
streamSequenceList.Add(streams);
这不适用于您的情况,因为:
- 您使用的是通用类,而不是接口(interface)
- 您无法将其更改为通用协变 接口(interface),因为您有
T
“进入”和“进入”API - 您正在使用值类型作为类型参数,并且它们不适用于通用变量(因此
IEnumerable<int>
不是IEnumerable<object>
)
关于c# - 将不同类型的通用对象添加到通用列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7088551/