xが値の場合、次は構文的には異なりますが、実質的に同じですか?2番目は最初のショートカットですか?
Convert.ToInt32(x);
(int)x;
または、ある状況で一方を他方の上に重ねて使用できますか?
MSDNを見ると、最初の方法は2番目の方法とは異なることをしているようです。
(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
情報を失うリスクなしに変換を行うことができない場合、コンパイラーは、キャストと呼ばれる明示的な変換を実行することを要求します。キャストは、変換を行う予定であり、データ損失が発生する可能性があることを認識していることをコンパイラーに明示的に通知する方法です。
ここにある他のすべての投稿に加えて、Convert.ToInt32
結果を丸める傾向がありますがint
、結果は切り捨てられます。
例:
float x = -0.6f;
var b = Convert.ToInt32(x);
var r = (int)x;
この結果はb==-1
、burr==0
です。
これは覚えておくべき根本的な違いです
x
が数値を含む文字列の場合、最初の文字列は成功しますが、2番目の文字列は失敗します。
object x = "1";
Convert.ToInt32(x); // works
(int)x; // fails
Convert.ToInt32は、多くの種類のオブジェクトをに変換するメソッドであり、int
単純(int)
なキャストです。これにより、例外が発生する可能性があります。
彼らは違う。intはキャストであり、ToInt32は変換プロセスです。それははるかに多くのことを行い、誤ったデータに対してより寛容であり、ほとんど常に機能します。
の場合(int)x
、CLRに組み込まれておりx
、数値変数である必要があります。そうでない場合、例外が発生します。
Convert.ToInt32
は、任意のプリミティブ型からに変換する一般的な変換関数として設計されていint
ます。