最爲廣泛常見,略。html
在C#3.0 中,引入了擴展方法,能夠以一種更優雅的方式來進行參數驗證,如:c#
1 //參數輔助類 2 public static class ArgumentHelper 3 { 4 public static void RequireRange(this int value, int minValue, int maxValue, string argumentName) 5 { 6 if (value > maxValue || value < minValue) 7 { 8 throw new ArgumentException(string.Format("The value must be between {0} and {1}", minValue, maxValue), argumentName); 9 } 10 } 11 12 public static void RequireNotNullOrEmpty(this string value, string argumentName) 13 { 14 if (string.IsNullOrEmpty(value)) 15 { 16 throw new ArgumentException("The value can't be null or empty", argumentName); 17 } 18 } 19 } 20 21 //用戶註冊 22 public bool Register(string name, int age) 23 { 24 name.RequireNotNullOrEmpty("name"); 25 age.RequireRange(10,70,"age"); 26 //insert into db 27 }
如FluentValidation,CuttingEdge.Conditions,Enterprise Liberary(Validation Application Block組件),Code Contracts(.NET 4.0正式引用)等。數組
如ASP.NET MVC的Model中數據標記(Data Annotations) 屬性。框架
參考資料:C# 中參數驗證方式的演變ide
全角空格爲12288,半角空格爲32,其餘字符半角(33-126)與全角(65281-65374)的對應關係是:均相差65248。基於此便不難實現他們之間的轉換:函數
1 /// <summary> 2 ///轉全角的函數(SBC case) 3 ///全角空格爲12288,半角空格爲32 4 ///其餘字符半角(33-126)與全角(65281-65374)的對應關係是:均相差65248 5 /// </summary> 6 /// <param name="input">輸入</param> 7 /// <returns></returns> 8 public static String ToSBC(String input) 9 { 10 char[] c = input.ToCharArray(); 11 12 for (int i = 0; i < c.Length; i++) 13 { 14 if (c[i] == 32) 15 { 16 c[i] = (char)12288; 17 18 continue; 19 } 20 21 if (c[i] < 127) 22 23 c[i] = (char)(c[i] + 65248); 24 } 25 26 return new String(c); 27 } 28 29 30 /// <summary> 31 ///轉半角的函數(DBC case) 32 ///全角空格爲12288,半角空格爲32 33 ///其餘字符半角(33-126)與全角(65281-65374)的對應關係是:均相差65248 34 /// </summary> 35 /// <param name="input"></param> 36 /// <returns></returns> 37 public static String ToDBC(String input) 38 { 39 char[] c = input.ToCharArray(); 40 41 for (int i = 0; i < c.Length; i++) 42 { 43 if (c[i] == 12288) 44 { 45 c[i] = (char)32; 46 continue; 47 } 48 49 if (c[i] > 65280 && c[i] < 65375) 50 51 c[i] = (char)(c[i] - 65248); 52 } 53 54 return new String(c); 55 }
參考資料:C#全角和半角轉換ui
Convert.ToString能處理字符串爲null的狀況。ToString方法不能處理字符串爲null的狀況,會拋出異常。this
關係以下圖:spa
(1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串");code
(2)byte[] bt=Convert.FromBase64String("字符串");
(1)MemoryStream ms=new MemoryStream(System.Text.Encoding.Default.GetBytes("字符串"));
(2)MemoryStream ms=new MemoryStream(Convert.FromBase64String("字符串"));
(1)byte[] bt=ms.ToArray();
(2)MemoryStream ms=new MemoryStream();ms.Write(bt,0,ms.Length);
(1)string str=Convert.ToBase64String(ms.ToArray());
(2)string str=System.Text.Encoding.Default.GetString(ms.ToArray());
(1)string str=System.Text.Encoding.Default.GetString(bt);
(2)string str=Convert.ToBase64String(bt);
(1)MemoryStream ms=new MemoryStream(bt);
(2)MemoryStream ms=new MemoryStream();ms.Read(bt,0,bt.Lenght);
參考資料:字符串string 、byte[]、MemoryStream、Base64String的相互轉換
輸出參數在最後,基於些獲取方法以下:
1 var msg = string.Empty; 2 object[] parameters = new object[] { model, null }; 3 4 //函數簽名爲public bool Update(DB_BedInfo model, out string mess); 5 updateMethod.Invoke(serviceObj, parameters); 6 7 //parameters[1]即爲out帶出的值 8 msg = Convert.ToString(parameters[1]);
具名參數 和 可選參數 是 C# 4.0 出來的新特性。當有多個可選參數,前面的可選參數不想傳時,可以使用具名參數解決。