参数验证方式
1. 一般方法
1.1 手动验证
最为普遍常见,略。
1.2 使用扩展方法验证
在C#3.0 中,引入了扩展方法,可以以一种更优雅的方式来进行参数验证,如:
//参数辅助类
public static class ArgumentHelper
{
public static void RequireRange(this int value, int minValue, int maxValue, string argumentName)
{
if (value > maxValue || value < minValue)
{
throw new ArgumentException(string.Format("The value must be between {0} and {1}", minValue, maxValue), argumentName);
}
} public static void RequireNotNullOrEmpty(this string value, string argumentName)
{
if (string.IsNullOrEmpty(value))
{
throw new ArgumentException("The value can't be null or empty", argumentName);
}
}
} //用户注册
public bool Register(string name, int age)
{
name.RequireNotNullOrEmpty("name");
age.RequireRange(,,"age");
//insert into db
}
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。基于此便不难实现他们之间的转换:
/// <summary>
///转全角的函数(SBC case)
///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
/// </summary>
/// <param name="input">输入</param>
/// <returns></returns>
public static String ToSBC(String input)
{
char[] c = input.ToCharArray(); for (int i = ; i < c.Length; i++)
{
if (c[i] == )
{
c[i] = (char); continue;
} if (c[i] < ) c[i] = (char)(c[i] + );
} return new String(c);
} /// <summary>
///转半角的函数(DBC case)
///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static String ToDBC(String input)
{
char[] c = input.ToCharArray(); for (int i = ; i < c.Length; i++)
{
if (c[i] == )
{
c[i] = (char);
continue;
} if (c[i] > && c[i] < ) c[i] = (char)(c[i] - );
} return new String(c);
}
参考资料: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带出的值
输出参数在最后,基于些获取方法如下:
var msg = string.Empty;
object[] parameters = new object[] { model, null }; //函数签名为public bool Update(DB_BedInfo model, out string mess);
updateMethod.Invoke(serviceObj, parameters); //parameters[1]即为out带出的值
msg = Convert.ToString(parameters[]);
具名参数和可选参数
具名参数 和 可选参数 是 C# 4.0 出来的新特性。当有多个可选参数,前面的可选参数不想传时,可使用具名参数解决。