C# 工具類--類型轉換的泛型方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace LinqPractice
{
class Utility
{
public static T ConvertDataRow<T>(DataRow dr, string columnName,T defaultValue)
{
if (dr.Table.Columns.Contains(columnName))
{
return ConvertType<T>(dr[columnName],defaultValue);
}
return default(T);
}
/// <summary>
/// 泛型數據類型轉換
/// </summary>
/// <typeparam name="T">自定義數據類型</typeparam>
/// <param name="value">傳入需要轉換的值</param>
/// <param name="defaultValue">默認值</param>
/// <returns></returns>
public static T ConvertType<T>(object value,T defaultValue)
{
try
{
return (T)ConvertToT<T>(value,defaultValue);
}
catch
{
return default(T);
}
}
/// <summary>
/// 轉換數據類型
/// </summary>
/// <typeparam name="T">自定義數據類型</typeparam>
/// <param name="myvalue">傳入需要轉換的值</param>
/// <param name="defaultValue">默認值</param>
/// <returns></returns>
private static object ConvertToT<T>(object myvalue,T defaultValue)
{
TypeCode typeCode = System.Type.GetTypeCode(typeof(T));
if (myvalue != null)
{
string value = Convert.ToString(myvalue);
switch (typeCode)
{
case TypeCode.Boolean:
bool flag = false;
if (bool.TryParse(value, out flag))
{
return flag;
}
break;
case TypeCode.Char:
char c;
if (Char.TryParse(value, out c))
{
return c;
}
break;
case TypeCode.SByte:
sbyte s = 0;
if (SByte.TryParse(value, out s))
{
return s;
}
break;
case TypeCode.Byte:
byte b = 0;
if (Byte.TryParse(value, out b))
{
return b;
}
break;
case TypeCode.Int16:
Int16 i16 = 0;
if (Int16.TryParse(value, out i16))
{
return i16;
}
break;
case TypeCode.UInt16:
UInt16 ui16 = 0;
if (UInt16.TryParse(value, out ui16))
return ui16;
break;
case TypeCode.Int32:
int i = 0;
if (Int32.TryParse(value, out i))
{
return i;
}
break;
case TypeCode.UInt32:
UInt32 ui32 = 0;
if (UInt32.TryParse(value, out ui32))
{
return ui32;
}
break;
case TypeCode.Int64:
Int64 i64 = 0;
if (Int64.TryParse(value, out i64))
{
return i64;
}
break;
case TypeCode.UInt64:
UInt64 ui64 = 0;
if (UInt64.TryParse(value, out ui64))
return ui64;
break;
case TypeCode.Single:
Single single = 0;
if (Single.TryParse(value, out single))
{
return single;
}
break;
case TypeCode.Double:
double d = 0;
if (Double.TryParse(value, out d))
{
return d;
}
break;
case TypeCode.Decimal:
decimal de = 0;
if (Decimal.TryParse(value, out de))
{
return de;
}
break;
case TypeCode.DateTime:
DateTime dt;
if (DateTime.TryParse(value, out dt))
{
return dt;
}
break;
case TypeCode.String:
if (!string.IsNullOrEmpty(value))
{
return value.ToString();
}
break;
}
}
return defaultValue;
}
}
}
本文由用戶 m47c 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!