首页 > Python基础教程 >
-
C#教程之C#知识拾遗
参数验证方式
1. 一般方法
1.1 手动验证
最为普遍常见,略。
1.2 使用扩展方法验证
在C#3.0 中,引入了扩展方法,可以以一种更优雅的方式来进行参数验证,如:
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 }
2. 使用类型或框架
使用类库
如FluentValidation,CuttingEdge.Conditions,Enterprise Liberary(Validation Application Block组件),Code Contracts(.NET 4.0正式引用)等。
2.2 使用框架
如ASP.NET MVC的Model中数据标记(Data Annotations) 属性。
参考资料:C# 中参数验证方式的演变
全角与半角字符转换
全角空格为12288,半角空格为32,其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248。基于此便不难实现他们之间的转换:
参考资料:C#全角和半角转换
转string时,null的处理:
Convert.ToString能处理字符串为null的情况。ToString方法不能处理字符串为null的情况,会抛出异常。
string/byte[]/MemoryStream/Base64String的相互转换
关系如下图:
1.字符串转比特数组
(1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串");
(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 出来的新特性。当有多个可选参数,前面的可选参数不想传时,可使用具名参数解决。