C# 工具类--类型转换的泛型方法

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

    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;  
            }  
        }  
    }