2017-07-17 69 views
1

下面的代碼段對於給定的方法工作得很好,但我希望在類構造期間執行相同的操作。怎麼做?如何將未知類型的通用列表傳遞給類構造函數

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); 
     } 
    } 

.......

+1

這看起來類似於你的問題:https://stackoverflow.com/questions/39196357/generic-class-with-generic-constructor – SchwiftyPython

回答

5

此時類本身將需要通用的。事情是這樣的:

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

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

構造會知道在編譯時有什麼T是因爲類實例的聲明會指定它(或能夠推斷出它)。

1

除了給出答案,如果你想擁有一個非一般的DTLoader你可以創建一個抽象DTLoader,使通用的一個從它繼承

abstract class DTLoader 
{ 
//.. 
} 

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

這實際上給你的感覺,你似乎想 - 只有構造函數使用泛型類型。

+0

有趣 - 感謝擴大我的理解了一下! – user3496060

相關問題