所以我有點困惑如何做異常處理。我有這個菜單,我有5個選項,所以用戶輸入數字1-5。當用戶輸入大於5的字符串或數字時,我需要製作一個異常處理程序。任何提示?謝謝。異常處理C# - 如何只接受數字1-5,沒有字符串
回答
不要使用Exception
來處理代碼的流程,除非您希望突然停止當前流並與上層進行通信您的代碼需要通過調用代碼解決'特殊'情況。
在你的情況下,一個簡單的Int32.TryParse將解決你的問題。 假設你的應用程序是一個控制檯應用程序,你可以編寫這樣的事情
public static void Main(string[] args)
{
DisplayMenu();
while(true)
{
int menuChoice;
string userInput = Console.Readline();
if(Int32.TryParse(userInput, out menuChoice))
{
if(menuChoice >= 1 && menuChoice <= 5)
RunCommand(menuChoice);
else
Console.WriteLine("Enter a number between 1-5");
}
else
Console.WriteLine("A number between 1-5 is required!");
}
}
這不是您應該使用例外情況的類型。只要使用if語句,並且告訴用戶再次嘗試
int num;
if(int.TryParse(userInput, out num) == false || num> 5 || num< 1)
{
ShowError("don't do that");
}
提供一個檢查'if(!int.TryParse(...))',並且你已經得到了最好的答案。 – IAbstract 2013-05-02 22:05:53
@IAbstract編輯 – 2013-05-02 22:15:00
要做到這一點是有一個while循環,直到用戶輸入正確的價值觀的方式。
只是一個簡單的例子。這是假設你正在談論的菜單是一個控制檯菜單。
int userInput = -1;
while (true){
Console.WriteLine("Input value:");
try{
userInput = Int.Parse(Console.ReadLine());
if (userInput <1 || userInput >5){
throw new Exception();
}
}
catch{
Console.WriteLine("Invalid input");
continue;
}
break;
}
我不會使用異常處理來做到這一點。這聽起來更像是一個驗證的事情。如果這是針對網絡的,請查看RangeValidator。如果你真的想拋出一個異常,那麼你可以做這樣的事情:
if(myValue < 1 || myValue > 5)
{
Throw new System.Exception("Out of range!");
}
+1建議不要使用異常處理。 – IAbstract 2013-05-02 22:04:26
如果你真的需要,你可以使用正則表達式來驗證輸入。我不會拋出異常,因爲這不是異常處理的目的
使用正則表達式: 正則表達式類(System.Text.RegularExpressions)
Regex regex = new Regex(@"^[1-5]*$");
if (regex.IsMatch(compare))
{
//true
}
else
MessageBox.Show("ERROR");
對不起,沒有注意到。更新 – 2013-05-03 09:49:51
它現在接受空字符串和數字,如「55」。 – 2013-05-03 09:53:51
- 1. 字符串字典異常處理
- 2. Java - 字符串輸入異常處理
- 3. C#異常處理(給一個構造函數的字符串)
- 4. 只接受字符串文字的C++ 11函數?
- 5. java處理字符異常
- 6. MYSQL - 字符串長度20,字段接受varchar(15),沒有錯誤產生?
- 7. C預處理 - 連接字符串沒有多個解決
- 8. Obj-c/Cocoa touch:有UITableViewCell - CellTextField只接受數字字符?
- 9. 字符串如何接受整數?
- 10. 從C函數返回字符串接受兩個字符串
- 11. Ruby Regexp麻煩。如何接受一個字符串,只有當它沒有「富」
- 12. 接受的方法只有某些字符串在C#
- 13. 如何處理內存異常字符串生成器
- 14. 如何處理將字符串轉換爲雙倍的異常
- 15. 如何在C中處理字符串?
- 16. 如何計算字符串中的特殊字符javascript函數只接受像@#
- 17. 其只接受字符串或算術
- 18. C和字符串處理
- 19. C字符串處理
- 20. 接受C++字符串&C風格的字符串泛型類
- 21. 如果數據庫連接字符串無效,則處理異常
- 22. C#異常處理
- 23. strcpy函數如何接受地址以及字符串常量?
- 24. 未處理的異常:預期字符串字面調用JSON.parse
- 25. 在C#中連接字符串時處理空異常的最佳方法?
- 26. 如何強制文本框只接受字符串
- 27. 如何只接受一個字符串與Java中的某些字符
- 28. Lua table.insert不接受字符串參數
- 29. C#如何加密字符串,其中結果是字母或數字只有沒有任何其他字符?
- 30. 有沒有空處理字符串的方法在C#
你用什麼控制輸入數字? – alexm 2013-05-02 21:53:35
我想你可能想看看使用輸入驗證。這是Windows窗體,WPF,一個網站? – 2013-05-02 21:53:43