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;
                            }
  • 相关阅读:
    spring boot druid 密码加密
    微信小程序报错:Cannot read property ‘forceUpdate‘ of undefined
    uni-app uView 集成遇到问题VM93:5 app.js错误: TypeError: Cannot read property 'mark' of undefined
    uni-app uView 集成遇到问题TypeError: this.getOptions is not a function
    Windows系统zip安装MySQL 5.7 全过程
    Hibernate框架的优缺点及特性
    tomcat部署3种方式
    分布式系统学习
    RabbitMQ Study
    Sprint Boot 学习Q&A
  • 原文地址:https://www.cnblogs.com/xiaonangua/p/10137888.html
Copyright © 2011-2022 走看看