C# 工具類--類型轉換的泛型方法

m47c 10年前發布 | 1K 次閱讀 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!