2017-07-17 7 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を作成することができますし、それから、一般的な1つの継承を作る

abstract class DTLoader 
{ 
//.. 
} 

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

これは実際にあなたがしたいように見える感じを与えるだろう - コンストラクタだけにジェネリック型を使用させる。

+0

興味深い - 私の理解を少し拡大してくれてありがとう! – user3496060

関連する問題