需要一个类型安全的项目包,所有项目都实现了通用接口.
希望做的事情如下:
var stringItem = new IItem(); var numberItem = new IItem (); var items = new List >(); //T of course doesn't accomplish what I want items.Add(stringItem); items.Add(numberItem);
就像是:
interface IItem { object Value { get; set; } } //Update: 2009-03-19 03:08 PM MST //Added the following interface for clarity of my question interface IItem: IItem { new T Value { get; set; } }
然后,我可以:
var items = new List();
但是,我的包里丢失了安全性.所以,我想到了Dictionary
:
var dict = new Dictionary>>(); //T is wrong again dict.Add(typeof(string), new List >); //that sure looks nice
Marc Gravell.. 5
我认为你不能逃避这个IItem
和IItem
不同的事实; 通常的方法是基础接口:
interface IItem { object Value {get;} } interface IItem: IItem { new T Value {get;} }
这样,您可以编写代码IItem
,但实际的实例(通常IItem
为某些实例实现T
)在内部是强类型的.
我认为你不能逃避这个IItem
和IItem
不同的事实; 通常的方法是基础接口:
interface IItem { object Value {get;} } interface IItem: IItem { new T Value {get;} }
这样,您可以编写代码IItem
,但实际的实例(通常IItem
为某些实例实现T
)在内部是强类型的.