2009-05-26 22 views
2

実行時に関数に渡されるパラメータをキャストするにはどうすればよいですか?動的キャスト

private object PopulateObject(object dataObj, System.Data.DataRow dataRow, string query) 
{ 


    object = DataAccess.Retriever.RetrieveArray<dataObj.GetType()>(query); 

実行時に型宣言内でdataObj.GetType()を取得する方法を知りたいと思います。

答えて

8

はこのような何かを試してみてください:

private T PopulateObject<T>(T dataObj, System.Data.DataRow dataRow, string query) 
{ 
    dataObj = DataAccess.Retriever.RetrieveArray<T>(query); 
} 

これはPopulateObjectに供給された型引数もRetrieveArrayための型引数になるように、あなたがこの方法で任意の反射を避けるためにできるようになります。このメソッドを呼び出すことにより、コンパイラはTの型を推論することができ、実行時の型チェックの作成を避けることができます。

+0

汎用メソッドFTW! – Randolpho

+0

RetrieverがContextBoundObjectでないことを願います。 – TheMissingLINQ

+0

ContextBoundObjectsはジェネリックメソッドを持つことができないので、ジェネリックメソッドを公開しているので、 "Retriever"タイプが "ContextBoundObject"から継承しないと仮定することはOKです。 –

0

変数宣言は実行時ではなくコンパイル時に行われるため、これを行うことはできません。ジェネリックメソッドを作成する必要があります。

private T PopulateObject<T>(T dataObj, DataRow dataRow, String query) 
{ 
    return DataAccess.Retriever.RetrieveArray<T>(query); 
} 
0

実行時にジェネリック型パラメータを設定する方法を知りたいですか?

あなたはここにリフレクションをする必要があります - MakeGenericMethod

注:タイプはコンパイル時に決定することができ、型パラメータを使用して、これを書き換えます。

private T PopulateObject<T>(T dataObj, System.Data.DataRow dataRow, string query) 
{ 
    dataObj = DataAccess.Retriever.RetrieveArray<T>(query); 
} 
関連する問題