5

次のコードがあります

//^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

4

2 に答える 2

17

最初のステップは、作成する実際の型を取得することです。ほとんどの場合、型の名前はデータベースに 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

于 2012-11-06T15:49:35.443 に答える
2

Knaģis はすでに適切な回答を提供していますが、このコード行が正しくないことを指摘したいと思います。

Type T =dt.Columns[0].DataType.GetType();

これは常に、、Typeではなくstringintなどを返します。これは、のタイプが であるためDataTypeですType。代わりにこれを使用してください:

Type T =dt.Columns[0].DataType;

また、ジェネリック型の命名規則を使用しています。最初の読み取りでは少し混乱しますが、「間違っている」ことは何もありません。ジェネリック型と変数には違いがあることに注意してください。たとえば、質問にコードを入力すると、このコードは使用できなくなります。

var x = new List<T>;

コードのコンテキストでTは、はジェネリック型ではなく変数であるため、上記はコンパイル時エラーを引き起こします。

詳細については、この質問を参照してください:
Generics in C#, using type of a variable as parameter

于 2012-11-06T16:22:21.763 に答える