给定通用属性类:
public class Attribute<T>
{
string Name { get; set; }
T Value { get; set; }
}
有没有办法让一个包含可枚举的对象包含各种类型的泛型(例如int,string,datetime)。
public class AttributableObject
{
IEnumerable<???> attributes { get; set;}
}
有没有这样做不会遇到差异问题?
答案 0 :(得分:5)
典型的方法是让泛型类派生自非泛型基类(或接口),然后具有该类型的可枚举:
public abstract class AttributeBase
{
// Non-generic stuff here
}
public class Attribute<T> : AttributeBase
{
// Generic stuff here
}
然后你可以声明:
IEnumerable<AttributeBase> attributes;
当然,如果您想使用任何通用功能(例如实际获取值),您仍然需要知道每个元素的类型。
请注意,协方差/逆变在这里没有用,因为Value
属性既可设置又可获取,因此泛型参数是不变的(更不用说它是一个通用的类,所以无论如何它都不能成为co / contra-variant。)