DataTable转list时 可空类型的转换问题

public class UtilHelper
    {
        public static IList<T> ConvertTo<T>(DataTable table)
        {
            if (table == null)
            {
                return null;
            }

            List<DataRow> rows = new List<DataRow>();

            foreach (DataRow row in table.Rows)
            {
                rows.Add(row);
            }

            return ConvertTo<T>(rows);
        }
        public static IList<T> ConvertTo<T>(IList<DataRow> rows)
        {
            IList<T> list = null;

            if (rows != null)
            {
                list = new List<T>();

                foreach (DataRow row in rows)
                {
                    T item = CreateItem<T>(row);
                    list.Add(item);
                }
            }

            return list;
        }

        public static T CreateItem<T>(DataRow row)
        {
            T obj = default(T);
            if (row != null)
            {
                obj = Activator.CreateInstance<T>();

                foreach (DataColumn column in row.Table.Columns)
                {
                    PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);
                    try
                    {
                        Type type = prop.PropertyType;
                        //if判断就是解决办法
                        if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))//判断convertsionType是否为nullable泛型类  
                        {
                            //如果type为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换  
                            System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(type);
                            //将type转换为nullable对的基础基元类型  
                            type = nullableConverter.UnderlyingType;
                        }
                        object value = row[column.ColumnName];
                        if (value != DBNull.Value)
                            prop.SetValue(obj, Convert.ChangeType(value, type), null);
                        //prop.SetValue(obj, value, null);
                    }
                    catch
                    {
                        
                    }
                }
            }

            return obj;
        }
    }                                                                                                                                                                                                        

解决办法

//if判断就是解决办法
                        if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))//判断convertsionType是否为nullable泛型类  
                        {
                            //如果type为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换  
                            System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(type);
                            //将type转换为nullable对的基础基元类型  
                            type = nullableConverter.UnderlyingType;
                        }
原文地址:https://www.cnblogs.com/xiaonangua/p/10137888.html