C#知識拾遺

 參數驗證方式

1.    通常方法

1.1 手動驗證

最爲廣泛常見,略。html

1.2 使用擴展方法驗證

在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 }
View Code

2. 使用類型或框架

使用類庫

FluentValidationCuttingEdge.ConditionsEnterprise Liberary(Validation Application Block組件),Code Contracts(.NET 4.0正式引用)等。數組

2.2 使用框架

         如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         }
View Code

參考資料:C#全角和半角轉換ui

 

轉string時,null的處理:

Convert.ToString能處理字符串爲null的狀況。ToString方法不能處理字符串爲null的狀況,會拋出異常。this

 

string/byte[]/MemoryStream/Base64String的相互轉換

關係以下圖:spa

1.字符串轉比特數組

(1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串");code

(2)byte[] bt=Convert.FromBase64String("字符串");

2.字符串轉流

(1)MemoryStream ms=new MemoryStream(System.Text.Encoding.Default.GetBytes("字符串"));

(2)MemoryStream ms=new MemoryStream(Convert.FromBase64String("字符串"));

3.流轉比特數組

(1)byte[] bt=ms.ToArray();

(2)MemoryStream ms=new MemoryStream();ms.Write(bt,0,ms.Length);

4.流轉字符串

(1)string str=Convert.ToBase64String(ms.ToArray());

(2)string str=System.Text.Encoding.Default.GetString(ms.ToArray());

5.比特數組轉字符串

(1)string str=System.Text.Encoding.Default.GetString(bt);

(2)string str=Convert.ToBase64String(bt);

6.比特數組轉流

(1)MemoryStream ms=new MemoryStream(bt);

(2)MemoryStream ms=new MemoryStream();ms.Read(bt,0,bt.Lenght);

 

參考資料:字符串string 、byte[]、MemoryStream、Base64String的相互轉換

 

c# 反射Invoke調用方法得到out帶出的值

         輸出參數在最後,基於些獲取方法以下:

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 出來的新特性。當有多個可選參數,前面的可選參數不想傳時,可以使用具名參數解決。

相關文章
相關標籤/搜索