2017-09-07 249 views
-1

我正在做一個非常容易的任務。 我有一個文本框和一個按鈕,如果用戶填寫一個數字,它會檢查它是否是正確的數字。現在我想確保用戶輸入是一個數字,如果不是那麼我想要一個消息框出現,要求填寫一個數字。我做了下面的代碼,但是當我在文本框中填寫一個字母時,它給了我一個錯誤。爲什麼?!int.TryParse我做錯了什麼?

 private void guessBtn_Click(object sender, EventArgs e) 
    { 
     int number 
     number = Convert.ToInt32(numberTb.Text); 

     if (!int.TryParse(numberTb.Text, out number)){ 
      MessageBox.Show("This isn't a number"); 
     } else if (number == 3) { 
      MessageBox.Show("Correct!"); 
     } else if (number < 3) { 
      MessageBox.Show("Incorrect, number must be higher"); 
     } else { 
      MessageBox.Show("Incorrect, number must be lower"); 
     } 
    } 
+3

錯誤是由於'Convert.ToInt32',你不需要,只是評論說出來。如果轉換失敗,Convert.ToInt32會拋出異常。 – Habib

+2

這是'Convert.ToInt32'。爲什麼在檢查前轉換?請注意,如果你傳入一個字符串,'Convert.ToInt32'和'int.Parse'基本上是一樣的。當然'int.TryParse'就是這樣做的,不會拋出異常。 – juharr

+0

可能會有點新奇,但如果我做number =(numberTb.text)它將不會接受那種代碼 –

回答

2

TryParse不僅返回字符串是否可以轉換爲整數。它實際上進行了轉換,並將結果放入out參數中。

因此,在撥打TryParse之前,您不需要撥打Convert.ToInt32

您得到了一個例外,因爲Convert.ToInt32如果字符串無效則會拋出異常。基本上,您的程序因爲Convert.ToInt32而終止,甚至在達到TryParse之前。

因此,請刪除Convert.ToInt32行。

+0

謝謝,我不知道TryParse做了轉換,它爲我清除了很多 –

+0

@DirkHeijnen你可以在這裏閱讀更多關於它的信息! https://msdn.microsoft.com/en-us/library/f02979c7(v=vs.110).aspx – Sweeper

+0

如果您想要另一種方法來檢查字符串是否只是數字,您可以嘗試:mystring.All (char.IsDigit) – EdwinJ85