2012-08-06 60 views
1

在進入負值一個文本框,我得到一個錯誤說Unhandled Exception: System.OverflowException: Value was either too large or too small for a UInt32.UINT拋出OverflowException異常

這裏是我的代碼:

UInt32 n = Convert.ToUInt32(textBox2.Text);  
     if (n > 0) 
      //code 
     else 
     //code 
+1

您期望什麼行爲? 'uint'不能代表負數(它是無符號的),所以拋出一個異常,而不是返回無意義的數據是一個不錯的選擇。你可能想要'uint.TryParse',但你的問題有點不明確。 – CodesInChaos 2012-08-06 15:29:03

+0

爲什麼不使用內置的'int'別名? – Oded 2012-08-06 15:29:30

+1

我建議閱讀一本關於編程基礎知識的好書! – 2012-08-06 15:30:09

回答

6

這是因爲UInt32是無符號。您應該使用Int32(未簽名)。

所以,你的代碼應該是這樣的:

Int32 n = Convert.ToInt32(textBox2.Text); 
if (n > 0) 
    //code 
else 
    //code 

不過,我寧願把它像:

int n; 
// TryParse method tries parsing and returns true on successful parsing 
if (int.TryParse(textBox2.Text, out n)) 
{ 
    if (n > 0) 
     // code for positive n 
    else 
     // code for negative n 
} 
else 
    // handle parsing error 
+0

啊!我在混合Uint和Int,但現在已經夠清楚了。但爲什麼你會這樣寫你的代碼?調用函數有點貴!不是? – kushalvm 2012-08-06 18:23:27

+0

@ kushal好,不是昂貴的,我想。甚至根本不貴。但是,我一次調用一個解析函數,並且您也這樣做,所以沒有額外的調用。 – 2012-08-07 07:28:58

+0

@kushal我寫這樣的代碼的原因是控制:我控制值是否被解析,然後可以決定是否應該拋出異常或只是向用戶顯示消息。如果我把你的問題弄錯了,請告訴我,以便我能回答正確的問題。 – 2012-08-07 07:32:21

1

輸入負值意味着你正試圖轉換帶負號的值,轉換爲一個無符號的值,從而導致溢出異常。要麼使用Int32,要麼檢查負數,並做一些事情來防止錯誤。

1

您不能將負值轉換爲無符號值。 The MSDN明確指出您將收到異常。請執行以下操作:

Int32 n= Convert.ToInt32(textBox2.Text); 
UInt32 m = (UInt32) n; 
+0

只需將值存儲在Int32中,然後使用強制轉換。 UInt32 unsignedValue =(UInt32)signedValue; – steveg89 2012-08-06 18:20:06

+0

我得到了答案,所以我刪除了評論,但你的解決方案將無法正常工作。它不檢索相同的有符號整數值。您應該首先自行檢查 – kushalvm 2012-08-06 18:35:16

+0

它適用於符合有符號整數的值。顯然,負值被視爲正值,所以它會改變一切。 – steveg89 2012-08-06 18:43:05