2

我想知道这是否可能,我想做的是在创建此类的实例时设置列表的类型。

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
}
4

4 回答 4

8

使用泛型类型定义:

class MyClass<T>
{   
    private Type _type = typeof(string);
    public MyClass()
    {
        this._type = typeof(T);
    }

    public List<T> MyList { get; set; }  <----it likes this
}

如果您需要接受传入的Type参数并且泛型不起作用,您可以执行以下操作:

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
}

这不提供任何类型强制。你的旅费可能会改变。

于 2013-06-03T19:03:29.530 回答
6
class MyClass <T>
{
    public List<T> MyList { get; set; }
}
于 2013-06-03T19:03:34.107 回答
2

使用泛型很容易:

class MyClass<T>
{
    public List<T> MyList { get; set; } 
}

http://msdn.microsoft.com/en-us/library/512aeb7t(v=vs.80).aspx

于 2013-06-03T19:04:32.610 回答
1
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");
于 2013-06-03T19:08:37.503 回答