我想知道这是否可能,我想要做的是设置列表的类型,当我创建此类的实例。动态类型列表
class MyClass
{
private Type _type = typeof(string);
public MyClass(Type type)
{
this._type = type;
}
public List<_type> MyList { get; set; } <----it does not like this
}
我想知道这是否可能,我想要做的是设置列表的类型,当我创建此类的实例。动态类型列表
class MyClass
{
private Type _type = typeof(string);
public MyClass(Type type)
{
this._type = type;
}
public List<_type> MyList { get; set; } <----it does not like this
}
使用泛型类型定义:如果你需要接受Type
参数所传递和泛型将无法正常工作,你可以这样做
class MyClass<T>
{
private Type _type = typeof(string);
public MyClass()
{
this._type = typeof(T);
}
public List<T> MyList { get; set; } <----it likes this
}
:
class MyClass
{
private Type _type = typeof(string);
public MyClass(Type type)
{
this._type = typeof(type);
this.MyList = Activator.CreateInstance(typeof(List<>).MakeGenericType(type));
}
public IList MyList { get; set; } <----it likes this
}
它的优点是强制列表中的类型约束。只有给定类型的项目可以添加到列表中。缺点是你需要投射你从它得到的每一件物品。如果你避免了这种情况并使用上面的通用示例,那会更好。第三种选择是完全消除泛型:
class MyClass
{
private Type _type = typeof(string);
public MyClass(Type type)
{
this._type = typeof(type);
this.MyList = new ArrayList();
}
public IList MyList { get; set; } <----it likes this
}
这不提供任何类型的强制执行。你的旅费可能会改变。
class MyClass <T>
{
public List<T> MyList { get; set; }
}
这是我的问题的解决方案。谢谢, –
随着仿制药很容易:
class MyClass<T>
{
public List<T> MyList { get; set; }
}
http://msdn.microsoft.com/en-us/library/512aeb7t(v=vs.80).aspx
这解决了它,谢谢。 –
class MyClass<T>
{
public MyClass()
{
MyList = new List<T>();
}
public List<T> MyList { get; set; }
}
和使用方法:
MyClass<string> x = new MyClass<string>();
x.MyList.Add("asdf");
最简单的解决办法是让类通用... –