C#學習7:程式中的異常和錯誤處理
使用try,catch語句處理異常
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace cam{ /// <summary> /// MainWindow.xaml 的互動邏輯 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { try { int num1 = int.Parse(txtNum1.Text); int num2 = int.Parse(txtNum2.Text); int result = num1 + num2; txtResult.Text = result.ToString(); } catch (FormatException cam) //格式錯誤 { MessageBox.Show(cam.Message); } catch (OverflowException cam) //資料溢出 { MessageBox.Show(cam.Message); } catch (Exception cam) { MessageBox.Show(cam.Message); } } }}
用checked和unchecked檢查整型算術運算是否溢出
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace com{ class Program { static void Main(string[] args) { int number = int.MaxValue; Console.WriteLine(number); try { checked { number++; } } catch (Exception cam) { Console.WriteLine(cam.Message); } Console.WriteLine(number); } }}
try,catch,finally是很常用的文法結構,用來控制可能發生異常時的程式流程,其中catch和finally至少要有一個,如果在try塊中有return,finally仍會執行
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace com{ class Program { static void Main(string[] args) { int number = int.Parse(Console.ReadLine()); try { string name = dayName(number); Console.WriteLine(name); } catch (ArgumentOutOfRangeException ex) { Console.WriteLine(ex.Message); } finally { Console.WriteLine("程式結束"); } } static string dayName(int number) { switch (number) { case 1: return "星期一"; case 2: return "星期二"; case 3: return "星期三"; case 4: return "星期四"; case 5: return "星期五"; case 6: return "星期六"; case 7: return "星期日"; default: throw new ArgumentOutOfRangeException("日期輸入不正確"); //手動拋出錯誤 } } }}