从属性</t>设置Generic(<t>)的类型

时间:2015-01-12 13:24:23

标签: c# .net generics properties

我想按照以下方式实现

// Property
public static T Type
{ get; set; }

private void Form1_Load(...)
{
    List<Type> abc = new ...
    // code.....

如上所述,当我加载Form1时,必须为类型= List定义Type (the property)。我怎样才能做到这一点?

3 个答案:

答案 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();