2012-07-03 24 views
1

存储不同泛型:给定一个通用的属性类在一个单一的可枚举

public class Attribute<T> 
{ 
    string Name { get; set; } 
    T Value { get; set; } 
} 

有一种方法,以具有包含含各种类型的通用的(例如整型,字符串,日期时间)的可枚举的对象。

public class AttributableObject 
{ 
    IEnumerable<???> attributes { get; set;} 
} 

有没有办法做到这一点,不会遇到差异问题?

+0

看看[此帖](http://stackoverflow.com/questions/10856497/what-kind-of-data-structure-to-use/10856583#10856583)。它看起来类似的想法。 – bluevector

回答

5

的典型方法是使通用类从一个非通用基类派生(或接口),然后有一个可枚举该类型的:

public abstract class AttributeBase 
{ 
    // Non-generic stuff here 
} 

public class Attribute<T> : AttributeBase 
{ 
    // Generic stuff here 
} 

然后可以声明:

IEnumerable<AttributeBase> attributes; 

当然,你还需要知道每个元素的类型是什么,如果你想使用任何通用的功能(象实际所获得的价值。)

注意COVA riance /逆变不会帮助这里,因为Value财产既设定和gettable,因此泛型参数是不变的(更不用提它的通用类,所以不能进行CO /反向变反正。)

+0

的问题是,在这种情况下,没有办法,我访问的一般属性,价值在我原来的目标,当我试图与他们合作。 – Matt

+0

@Matt你可以将它们转换/取消装箱到他们更多的派生版本。 – xandercoded

+0

删除我的答案B/C,这显然更好。 +1 –

相关问题