我正面临 .NET 泛型的问题。我想做的是保存一组泛型类型(GraphicsItem):
public class GraphicsItem<T>
{
private T _item;
public void Load(T item)
{
_item = item;
}
}
如何将这种开放的泛型类型保存在数组中?
实现一个非通用接口并使用它:
public class GraphicsItem<T> : IGraphicsItem
{
private T _item;
public void Load(T item)
{
_item = item;
}
public void SomethingWhichIsNotGeneric(int i)
{
// Code goes here...
}
}
public interface IGraphicsItem
{
void SomethingWhichIsNotGeneric(int i);
}
然后将该接口用作列表中的项目:
var values = new List<IGraphicsItem>();
如果要存储异构GrpahicsItem 即GraphicsItem< X> 和GrpahicsItem< Y> 需要从公共基类派生出来,或者实现公共接口。另一种选择是将它们存储在 List<object>
您是否尝试在非泛型方法中创建 GraphicsItem 数组?
您不能执行以下操作:
static void foo()
{
var _bar = List<GraphicsItem<T>>();
}
然后稍后填写列表。
更有可能你正在尝试做这样的事情?
static GraphicsItem<T>[] CreateArrays<T>()
{
GraphicsItem<T>[] _foo = new GraphicsItem<T>[1];
// This can't work, because you don't know if T == typeof(string)
// _foo[0] = (GraphicsItem<T>)new GraphicsItem<string>();
// You can only create an array of the scoped type parameter T
_foo[0] = new GraphicsItem<T>();
List<GraphicsItem<T>> _bar = new List<GraphicsItem<T>>();
// Again same reason as above
// _bar.Add(new GraphicsItem<string>());
// This works
_bar.Add(new GraphicsItem<T>());
return _bar.ToArray();
}
请记住,您将需要一个泛型类型引用来创建一个泛型类型的数组。这可以在方法级别(在方法后使用 T)或在类级别(在类后使用 T)。
如果您希望该方法返回 GraphicsItem 和 GraphicsItem 的数组,则让 GraphicsItem 从非泛型基类 GraphicsItem 继承并返回该数组。但是,您将失去所有类型的安全性。
希望有帮助。