私は2つのテストメソッドを持っています。最初の1つは正常に動作します。 2番目の例外は例外をスローしませんが、それはすべきです。なぜ、2番目の例外は例外をスローしませんか?C#インラインチェックステートメントが機能しません
[TestMethod]
[ExpectedException(typeof(OverflowException))]
public void LongToInt_OverflowWithCheckedBlock()
{
checked
{
int maxValue = 2147483647;
long longValue = (maxValue + 1);
int intValue = (int)longValue;
}
}
[TestMethod]
[ExpectedException(typeof(OverflowException))]
public void LongToInt_OverflowWithCheckedStatement()
{
int maxValue = 2147483647;
long longValue = (maxValue + 1);
int intValue = checked((int)longValue); // No Exception is thrown, why?
}
。 'longValue = maxValue + 1'は32ビット整数* first *で算術演算を行い、次に64ビットに変換します。このバグの最も一般的な形は 'double percent = someInteger/100;'です。質問は「なぜ私の割合は常にゼロですか?」です。あなたは* after *ではなく算術を行う前に算術演算を行う型に変換する必要があります。 –