zoukankan      html  css  js  c++  java
  • 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;
                            }
  • 相关阅读:
    React后台管理系统-商品管理列表组件
    React后台管理系统-商品列表搜索框listSearch组件
    React后台管理系统-table-list组件
    React后台管理系统-用户列表页面
    React后台管理系统- rc-pagination分页组件封装
    React后台管理系统-登录页面
    React后台管理系统-首页Home组件
    React后台管理系统-后台接口封装
    ThreadLocal的原理、作用、使用弱引用原因、应用举例
    N皇后问题的递归与非递归解法
  • 原文地址:https://www.cnblogs.com/xiaonangua/p/10137888.html
Copyright © 2011-2022 走看看