C# 語法---6.語句
判斷(if if...else 嵌套if switch 嵌套switch)
static void Ifstatement(string[] args) { if (args.Length = 0) { if (args.Length = 1) //嵌套if { Console.WriteLine("1"); } else if (args.Length = 2) { Console.WriteLine("2"); } else { Console.WriteLine("other"); } } } static void Casestatement(string[] args) { int a = 100; int b = 200; switch (a) { case 100: Console.WriteLine("外部"); switch (b) //嵌套switch { case 200: Console.WriteLine("內部"); break; } break; } }
循環(for/foreach in while do...while)
for:反復運行語句或語句塊,知道指定的表達式計算為false
foreach in 用於循環訪問集合,但不能在源集合中添加或移除項
while: 執行一個語句或語句塊,直到表達式為false
do..while: 與while不同的是至少執行一次do語句的一次循環
用for foreach in while 實現快速排序實例:
using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Text; namespace ConsoleApplication1 { class Program { /// <summary> /// 快速排序 /// </summary> /// <param name="args"></param> static void Main(string[] args) { Console.WriteLine("請輸入待排序數列(以\",\"分割):"); //轉義字符\ string _s = Console.ReadLine(); //獲取用戶輸入的值 string[] _sArray = _s.Split(",".ToCharArray()); //split() 將字符串分割,tochararry()將字符串轉換為字符數組 int _nLength = _sArray.Length; //數組長度 int[] _nArray = new int[_nLength]; //分配數組地址 for (int i = 0; i < _nLength; i++) { _nArray[i] = Convert.ToInt32(_sArray[i]);//Convert.ToInt32() 可以将多种类型(包括 object 引用类型)的值转换为 int 类型 } var list = _nArray.ToList(); QuickSort(list, 0, _nLength - 1); foreach (var i in list) { Console.WriteLine(i.ToString()); //foreach 遍歷輸出數值 }; while (true) { Thread.Sleep(10000); //程序延遲10秒 } } //獲得按曲軸值左右分流后曲軸的位置 private static int Division(List<int> list, int left, int right) { while (left < right) { int num = list[left]; //首元素設為曲軸 if (num > list[left + 1]) //與曲軸右邊的值比較,若大於則交換,若小於,則與right的值置換到曲軸右邊 { list[left] = list[left + 1]; list[left + 1] = num; left++; } else { int temp = list[right]; list[right] = list[left + 1]; list[left + 1] = temp; right--; } Console.WriteLine(string.Join(",",list)); } Console.WriteLine("----------------------\n"); return left; //指向此時曲軸的位置 } private static void QuickSort(List<int> list, int left, int right) { if (left < rihgt) { int i = Division(list, left,right); //遞歸調用函數 QuickSort(list, i + 1, right); //對軸右邊進行排序 QuickSort(list, left, i - 1); //對軸左邊進行排序 } } } }
迭代器yield return yield break
yield return 放回一個實現了IEnumerable接口的對象 ,保證每次循環遍歷的時候從前一次停止的地方開始執行
實際應用中實現“按需供給”
class MyClass { char[] chrs = { 'A', 'B', 'C', 'D' }; public IEnumerator<int> GetEnumerator() { foreach (char ch in chrs) yield return ch; //實現迭代器方法循環輸出字符數組中的每個字符 } } class MainClass { public static void Main() { MyClass mc = new MyClass(); foreach (char ch in mc) //當使用foreach循環時,迭代器會自動返回每個字符,并記錄當前狀態,當執行下一次代碼時,迭代器會從上次循環的位置繼續下次輸出(yield),返回下一個字符。 Console.Write(ch + ""); Console.WriteLine(); } }
yield break 用於終止循環遍歷
異常處理( try catch finally)
try 的作用是將可能引發異常的代碼包含在 try 塊中 如果發生了異常,則轉入catch執行,finally可有可無(如果沒有catch塊就是必須要的),不管有無異常,都會在異常處理結構最後執行
主要用於【忽略錯誤】,或出錯時,用messagebox【提示出錯】
class DivNumbers { int result; DivNumbers() { result = 0; } public void division(int num1, int num2) { try { result = num1 / num2; //除法運算,一旦發生異常,轉入catch中執行, } catch (DivideByZeroException e) { Console.WriteLine("Exception caught:{0}",e); //嘗試將整數除以0發生異常執行的代碼 } finally { Console.WriteLine("Result: {0},result"); //無論發生什麼都會執行 } } static void Main(string[] args) { DivNumbers d = new DivNumbers(); d.division(23, 0); Console.ReadKey(); } }