关于数据类型转换类,我想博客园中的99%的人都写过,不论你用什么编程语言,都应该涉及到数据类型转换,这里我说说我的一些想法,各位如果觉得合适的就采纳,觉得不屑一顾的可以飘过,拍砖的稍微轻一点。
先申明一下,本文讲到的数据类型转换,主要指的是.net自带的简单数据类型之间的转换, 如object, string, bool, DateTime, int ,long, double等之间的转换。
1、强制转换(XXX)obj,其中obj为要进行数据转换的对象,XXX为数据转换的目标数据类型。
优点:当obj是XXX类型的时候,我觉得转换的性能和效率还是很高的。
缺点:当obj不是XXX类型的时候,会抛出异常,什么转换失败啥的,这里就不深究了。
2、try{...Convert.ToXXX(obj)...}catch{...}方法;
优点:能够尽可能的将数据转换成目标数据,同时也对无法转换的情况做了异常处理。
缺点:抛出异常还是回造成一点性能的影响。
3、将数据转换成字符串,然后通过正则表达式方式进行数据类型验证,然后再进行数据转换。
优点,相对于第二种可以从一定程度上面减少异常的抛出;
缺点,需要写一些正则表达式,麻烦,而且还有一点,就是在进行数据转换之前会进行一次obj.ToString()操作。
4、XXX.TryParse(obj, out XXX outValue)
优点:这种方式采用.net自带的方法,进行判断数据是否可以转换成目标类型,而且在异步操作中可以同时指导是否转换成功,并获取转换成功之后的值
缺点:在数据转换之前也要进行一次obj.ToString()方法。
下面说说我自己用的一套数据转换方法,这里只举一个例子,就从object类型到int类型吧:
/// 将对象转换成int
/// </summary>
/// <param name="obj">要转换的对象</param>
/// <param name="defaultValue">转换失败返回的默认值</param>
/// <returns></returns>
public static int ToInt(object obj, int defaultValue)
{
if (obj == null || obj == DBNull.Value)
{
return defaultValue;
}
if (obj is int)
{
return (int)obj;
}
int ret;
if (!int.TryParse(obj.ToString(), out ret))
{
LogHelper.WriteLog("这里写下数据转换失败的日志信息...");
return defaultValue;
}
return ret;
}
个人觉得这个方法在转换错误的检查已经在转换失败后的处理方面都做得还是挺不错的!
ASP.NET开发技术交流群: 67511751(人员招募中...)