这可能是不可能的,但是我有这个课:
public class Metadata<DataType> where DataType : struct
{
private DataType mDataType;
}
还有更多,但让我们保持简单。泛型类型(DataType)受where语句限制为值类型。我要做的是列出这些不同类型(DataType)的元数据对象。如:
List<Metadata> metadataObjects;
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());
这有可能吗?
抽象基类和接口都通过限制可以添加到列表中的元素的类型来提供一定程度的控制。我也看不到拳击是怎么来的。
—
0b101010 2014年
当然,如果您使用的是.NET v4.0或更高版本,那么协方差就是解决方案。
—
0b101010 2014年
List<Metadata<object>>
绝招。
@ 0b101010我也这么认为,但是不幸的是,值类型上不允许出现方差。由于OP具有
—
nawfal 2014年
struct
约束,因此在这里不起作用。请参阅
@ 0b101010,两者都只限制引用类型,仍然可以添加任何内置值类型和任何结构。同样,最后,您有一个
—
Saeb Amini
MetaData
引用类型列表,而不是原始值类型,而没有每个元素的基础值类型的(编译时)信息,这实际上是 “装箱”。
List<object>
?相比,以下答案中的方法是否有任何真正的好处?他们不会停止装箱/拆箱,也不会消除铸造的需要,最终,您得到的Metadata
物体无法告诉您任何有关实际的信息DataType
,我正在寻找解决这些问题的解决方案。如果要声明一个接口/类,只是为了能够将实现/派生的泛型类型放入泛型列表中,那么与使用另一个具有无意义的层相比,它有何不同List<object>
?