次のコードがあります
//^process a aquery and return DataTable
DataTable d t= dbConnect.ProcessQuery(strquery);
Type t = dt.Columns[0].DataType.GetType();
t
を受け取るタイプのオブジェクトを作成する方法はdt[0][..]
?
dt.Rows[][]
私はそれがタイプになることを知っていますt
タイプの変数をアナグラム的に作成する必要がありますt
次のコードがあります
//^process a aquery and return DataTable
DataTable d t= dbConnect.ProcessQuery(strquery);
Type t = dt.Columns[0].DataType.GetType();
t
を受け取るタイプのオブジェクトを作成する方法はdt[0][..]
?
dt.Rows[][]
私はそれがタイプになることを知っていますt
タイプの変数をアナグラム的に作成する必要がありますt
最初のステップは、作成する実際の型を取得することです。ほとんどの場合、型の名前はデータベースに String として格納されます。だからあなたは電話する
var typeName = "System.Int32";
var type = System.Type.GetType(typeName);
インスタンス化したい実際の型ができたので、次のように呼び出します。
var obj = System.Activator.CreateInstance(type);
ほとんどの場合、各シナリオで使用するすべての型に共通の基本インターフェイスがあります。
var i = (IFormattable)obj;
これで、インターフェイスでメソッドを呼び出すことができ、実際の型で実行されます。
Console.WriteLine(i.ToString("0", System.Globalization.CultureInfo.InvariantCulture));
ドキュメント: http://msdn.microsoft.com/en-us/library/wccyzw83.aspx
Knaģis はすでに適切な回答を提供していますが、このコード行が正しくないことを指摘したいと思います。
Type T =dt.Columns[0].DataType.GetType();
これは常に、、Type
ではなくstring
、int
などを返します。これは、のタイプが であるためDataType
ですType
。代わりにこれを使用してください:
Type T =dt.Columns[0].DataType;
また、ジェネリック型の命名規則を使用しています。最初の読み取りでは少し混乱しますが、「間違っている」ことは何もありません。ジェネリック型と変数には違いがあることに注意してください。たとえば、質問にコードを入力すると、このコードは使用できなくなります。
var x = new List<T>;
コードのコンテキストでT
は、はジェネリック型ではなく変数であるため、上記はコンパイル時エラーを引き起こします。
詳細については、この質問を参照してください:
Generics in C#, using type of a variable as parameter