3

ここに例があります。

var tobeCasted = 1;
object data = null;

if (whatIsMyType == typeof(int)) {
    data = (int)tobeCasted;
}
else if (whatIsMyType == typeof(float)) {
    data = (float)tobeCasted;
}

ただし、上記のコードは各データ型を手動で検出します。次のような1行の一般的なソリューションを探しています:

 data = (whatIsMyType)tobeCasted;
4

4 に答える 4

13

メソッドを使用しConvert.ChangeTypeます。Convertクラスのドキュメントはこちらです。実行時の型強制に役立つ多くのメソッドが含まれています。

http://msdn.microsoft.com/library/system.convert.aspx

とはいえ、できればこれを避けてください。この種の実行時のタイピングは、コードの悪臭と見なすことができます。

于 2013-04-09T18:32:10.000 に答える
11

この特定のケースでは、次のことが必要だと思いますConvert.ChangeType

object data = Convert.ChangeType(toBeCasted, whatIsMyType);

もちろん、それは限られたタイプのセットでのみ機能しますが、そもそもキャストも機能します。あなたがやろうとしていることについてもっと教えていただければ助かります。もっと良いアプローチがあるかもしれません。

于 2013-04-09T18:30:50.917 に答える
1

結果を type の変数に貼り付ける場合は、そのままObject実行してください。あなたが今持っているように、int/float/whatever にキャストしてから、Object にキャストしています。真ん中の人を切り取ります。

var tobeCasted = 1;
object data = tobeCasted;
于 2013-04-09T18:30:10.823 に答える
0

あなたの例はあなたの本当のニーズを理解するにはあまりにも簡単ですが、おそらく TypeMapper のようなものがあなたの使用に適しています。

于 2013-04-16T18:27:06.557 に答える