पर काम नहीं करता है मेरे पास दो परीक्षण विधियां हैं। पहला एक ठीक काम करता है। दूसरा एक अपवाद नहीं फेंकता है, लेकिन यह चाहिए। दूसरे व्यक्ति ने अपवाद क्यों नहीं फेंक दिया?सी # इनलाइन चेक कथन
[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 बिट पूर्णांक * अंक * में अंकगणित करता है और फिर 64 बिट में परिवर्तित होता है। इस बग का सबसे आम रूप 'डबल प्रतिशत = कुछ इंटेगर/100;' है, और सवाल तब है "मेरा प्रतिशत हमेशा शून्य क्यों है?" आपको उस अंक में कनवर्ट करना है जिसे आप अंकगणित करने के इरादे से पहले * * * अंकगणित करते हैं, नहीं * के बाद *। –