我想按照以下方式实现
// Property
public static T Type
{ get; set; }
private void Form1_Load(...)
{
List<Type> abc = new ...
// code.....
如上所述,当我加载Form1
时,必须为类型= List
定义Type (the property)
。我怎样才能做到这一点?
答案 0 :(得分:2)
Type
是属性的名称,T
是类型名称。
List<T> abc = new List<T>();
我当然假设您已将封闭类参数化为class CustomForm<T>
答案 1 :(得分:1)
不确定为什么要使用属性设置它,或者如果可能的话 - 您是否希望能够在实例化之后更改类型?
如果您没有一些非常特殊的需求,也许您可以使用它?:
private void Form1_Load<T>(...) // Pass the type in here
{
List<T> abc = new List<T>();
}
用法:
this.Form1_Load<targetType>(...);
或者,在实例化包含Form1_Load()的类时传递类型:
class Container<T>
{
private void Form1_Load(...)
{
List<T> abc = new List<T>();
}
}
用法:
var instance = new Container<targetType>();
答案 2 :(得分:0)
您可以像这样创建一个类构建器:
public class GenericBuilder
{
public Type ParamType { get; set; }
public object CreateList() {
var listType = typeof(List<>);
ArrayList alist = new ArrayList();
alist.Add( this.ParamType );
var targetType = listType.MakeGenericType( (Type[])alist.ToArray(typeof(Type)) );
return Activator.CreateInstance( targetType );
}
}
然后你可以使用它:
var builder = new GenericBuilder();
builder.ParamType = typeof( int );
var result = builder.CreateList();