İki test yöntemim var. Birincisi iyi çalışıyor. İkincisi bir istisna atmaz, ama gerekir. Neden ikincisi bir istisna alamıyor?C# inline işaretli ifade çalışmıyor
[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?
}
Bir * Geç dönüşüm * hata var. longValue = maxValue + 1 ', 32 bit tam sayıdaki * ilk * aritmetiği yapar ve sonra 64 bit'e dönüştürür. Bu hatanın en yaygın şekli 'çift yüzde = birkısım/100'dür, ve soru o zaman neden "yüzde yüzüm sıfırdır?" Aritmetik yapmayı planladığınız türe dönüştürmeniz gerekir * önce * aritmetik yaparsınız, * sonra *. –