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;
}
}
}
以上就是c# 工具类--类型转换的泛型方法的内容。