2

xが値の場合、次は構文的には異なりますが、実質的に同じですか?2番目は最初のショートカットですか?

Convert.ToInt32(x);
(int)x;

または、ある状況で一方を他方の上に重ねて使用できますか?

MSDNを見ると、最初の方法は2番目の方法とは異なることをしているようです。

4

6 に答える 6

3

(int)明示的なキャストです。ここで、はConvert.ToIntメソッドです

検討:

string x = "1";
int temp = 0;
temp = Convert.ToInt32(x);
temp = (int)x; //This will give compiler error

互換性のあるタイプのキャストは機能します

long l = 123;
int temp2 = (int)l;

double d = 123.2d;
int temp3 = (int)d; // holds only the int part 123

明示的なキャストが表示される場合があります-MSDN

情報を失うリスクなしに変換を行うことができない場合、コンパイラーは、キャストと呼ばれる明示的な変換を実行することを要求します。キャストは、変換を行う予定であり、データ損失が発生する可能性があることを認識していることをコンパイラーに明示的に通知する方法です。

于 2012-08-30T07:30:43.270 に答える
2

ここにある他のすべての投稿に加えて、Convert.ToInt32結果を丸める傾向がありますがint、結果は切り捨てられます。

例:

  float x = -0.6f;
  var b = Convert.ToInt32(x);
  var r = (int)x;

この結果はb==-1、burr==0です。

これは覚えておくべき根本的な違いです

于 2012-08-30T07:33:24.227 に答える
1

xが数値を含む文字列の場合、最初の文字列は成功しますが、2番目の文字列は失敗します。

object x = "1";
Convert.ToInt32(x); // works
(int)x; // fails
于 2012-08-30T07:29:19.837 に答える
1

Convert.ToInt32は、多くの種類のオブジェクトをに変換するメソッドであり、int単純(int)なキャストです。これにより、例外が発生する可能性があります。

于 2012-08-30T07:29:51.437 に答える
1

彼らは違う。intはキャストであり、ToInt32は変換プロセスです。それははるかに多くのことを行い、誤ったデータに対してより寛容であり、ほとんど常に機能します。

于 2012-08-30T07:30:38.730 に答える
1

の場合(int)x、CLRに組み込まれておりx、数値変数である必要があります。そうでない場合、例外が発生します。

Convert.ToInt32は、任意のプリミティブ型からに変換する一般的な変換関数として設計されていintます。

于 2012-08-30T07:32:29.227 に答える