4


0

C#での型変換

私はオブジェクトとキャストするオブジェクトの型を取得する型変換のための一般的な方法を作ろうとしています。

`Convert.ChangeType()`を使うことで私はやりたいことができますが、実行時間がかかりすぎます。 私が欲しいようなジェネリッククラスを作るための最善の方法は何ですか。

私の古いコードはそのように見えます。

public static ConvertTo(object data) where T : struct // yes the worst variable name!
{
  // do some controls...

  return Convert.ChangeType(data, typeof(T));
}

編集:明確にするために…​

例のために。クエリを実行したところ、DataRowが返されました。 そして私がlongにキャストしたい10進数としてタイプしたカラムがあります。 このメソッドを呼び出すと、decimalをlongにキャストするのに非常に時間がかかります。

そしてこのメ​​ソッドのT型は値型だけでも構いません。 T:structという意味です

1 Answer


3


私はまだあなたのパフォーマンスの主張を疑っています。 これが証拠です。 以下のプログラムをコンパイルして実行します(リリースモード)。

システムを使用する。 System.Diagnosticsを使用します。

クラスTest {const int Iterations = 100000000;

static void Main(){ストップウォッチsw = Stopwatch.StartNew(); 10進数d = 1.0m。長期合計= 0。 (int i = 0; i <反復; i){long x = ConvertTo(d);合計= x。 sw.Stop(); Console.WriteLine( "時間:{0} ms"、sw.ElapsedMilliseconds); Console.WriteLine( "合計:{0}"、合計); }

public static T ConvertTo(オブジェクトデータ)ここで、T:struct {return(T)Convert.ChangeType(data、typeof(T)); }}

それは私のラップトップ上で20秒かかります - 1億回の繰り返しを実行するために。 40回の繰り返しを実行するのに、コンピュータで8秒かかるとは信じられません。

言い換えれば、私はその問題があなたがそれがあると思うところではないと強く疑う。