關於資料類型轉換類,我想部落格園中的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、將資料轉換成字串,然後通過Regex方式進行資料類型驗證,然後再進行資料轉換。
優點,相對於第二種可以從一定程度上面減少異常的拋出;
缺點,需要寫一些Regex,麻煩,而且還有一點,就是在進行資料轉換之前會進行一次obj.ToString()操作。
4、XXX.TryParse(obj, out XXX outValue)
優點:這種方式採用.net內建的方法,進行判斷資料是否可以轉換成目標類型,而且在非同步作業中可以同時指導是否轉換成功,並擷取轉換成功之後的值
缺點:在資料轉換之前也要進行一次obj.ToString()方法。
下面說說我自己用的一套資料轉換方法,這裡只舉一個例子,就從object類型到int類型吧:
/// <summary>
/// 將對象轉換成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(人員招募中...)