10

したがって、私は常に、C# でのキャストと変換は基本的に同じであると想定してきました。あるデータ型から別のデータ型に移行する 2 つの異なる方法です。ただし、これらは異なる結果を出力することが多いため、明らかにこれは正しくありません。

Convert.ToInt32(1.6)     //outputs 2
(Int32)1.6               //outputs 1


(DateTime)("10/29/2013")          //won't compile - cannot convert type 'string' to type 'system.date.time'
Convert.ToDateTime("10/29/2013")  //outputs 10/29/2013 12:00:00 AM
  • 私の質問は、2 つの主な違いは何ですか。また、なぜ異なる結果が返されるのですか?
  • どちらか一方を使用する「適切な」時期はいつですか?

個人的には、このConvert.To方法を使用していることに気づきました。もスローすることを知っていSystem.InvalidCastExceptionます。誰でも簡単な説明を提供できますか?

4

3 に答える 3

5

次の 2 つの場合にキャストを使用できます。

それ以外の場合はすべて、Convert またはその他のカスタム変換メソッド (DateTime.Parse など) を使用する必要があります。

なぜ彼らは異なる結果を返すのですか?

異なるコードが実行されるためです。Convert.ToInt32(double value)キャストのラウンド結果:

int num = (int) value;
double num2 = value - num;
if ((num2 > 0.5) || ((num2 == 0.5) && ((num & 1) != 0)))    
    num++;

return num;
于 2013-10-29T15:50:57.893 に答える
0

すべての場合に使用できる迅速なルールはありません。それぞれが何をするかを理解し、シナリオに最も適したものを選択するだけです。あなたが指摘したように、変換とキャストは異なる結果を生み出す可能性があります。その理由は、変換とキャストがまったく異なる実装を持つ可能性があるためです。

public static explicit operator MyStructA(MyStructB b)  
{
    MyStructA a = convert.ToMyStructA(b); 
    //I could do this so that convert and cast return the same but I don't have to.

    return a;
}
于 2013-10-29T16:12:59.047 に答える