如何将未知类型的通用列表传递给类构造函数

时间:2017-07-17 17:43:51

标签: c#

下面的代码段对于给定的方法效果很好但我想在类构造期间做同样的事情。怎么做?

public static DataTable ToDataTable<T>(IList<T> data)

想要这样的东西......但构造函数不喜欢<T>(IList<T>部分。

public class DTloader
{
    PropertyDescriptorCollection props;
    DataTable dataTable = new DataTable();
    public DTloader<T>(IList<T> data)
    {
        props = TypeDescriptor.GetProperties(typeof(T));
        for (int i = 0; i < props.Count; i++)
        {
            PropertyDescriptor prop = props[i];
            dataTable.Columns.Add(prop.Name, prop.PropertyType);
        }
    }

.......

2 个答案:

答案 0 :(得分:6)

此时,类本身需要是通用的。像这样:

public class DTloader<T>
{
    //...

    public DTloader(IList<T> data)
    {
        //...
    }
}

构造函数在编译时会知道T是什么,因为类实例的声明会指定它(或能够推断它)。

答案 1 :(得分:1)

除了给出的答案之外,如果你想拥有一个非通用的DTLoader,你可以创建一个抽象的DTLoader并使通用的DTLoader继承它

abstract class DTLoader
{
 //..
}

class DTLoader<T> : DTLoader
{
   public DTloader(IList<T> data)
   {
    //...
   }
}

这实际上会给你你想要的感觉 - 只有构造函数使用泛型类型。