zoukankan      html  css  js  c++  java
  • Convert.ChangeType不能处理Nullable类型的解决办法(转)

    https://www.cnblogs.com/patrickyu/p/3211115.html

    在做一个ORMapping功能的时候发现,Convert.ChangeType不能处理nullable类型,比如int?.

    解决办法也很简单,贴出完整的代码(大部分代码来自网络),注意下面代码没经过完整测试,不要直接用在项目里:

     public delegate void SetValue<T>(T value);

       

    public static class ORMapping<T> where T : class, new()
        {
            private static Delegate CreateSetDelegate(T model, string propertyName)
            {
                MethodInfo mi = model.GetType().GetProperty(propertyName).GetSetMethod();
                //这里构造泛型委托类型
                Type delType = typeof(SetValue<>).MakeGenericType(GetPropertyType(propertyName));
                return Delegate.CreateDelegate(delType, model, mi);
            }
            private static Type GetPropertyType(string propertyName)
            {
                return typeof(T).GetProperty(propertyName).PropertyType;
            }
            
            public static IList<T> ConvertToBusinessEntityList(DataTable dt)
            {
                IList<T> list = new List<T>();
                if (dt == null || dt.Rows.Count < 1) return list;
                Delegate setDelegate;
                foreach (DataRow dr in dt.Rows)
                {
                    T model = new T();
                    foreach (DataColumn dc in dt.Columns)
                    {
                        setDelegate = CreateSetDelegate(model, dc.ColumnName);
                        Type type = GetPropertyType(dc.ColumnName);
                        Type underlyingType = Nullable.GetUnderlyingType(type);
                        if (DBNull.Value != dr[dc.ColumnName])
                        {
                            setDelegate.DynamicInvoke(Convert.ChangeType(dr[dc.ColumnName], underlyingType ?? type));
                        }
                    }
                    list.Add(model);
                }
                return list;
            }
        }

  • 相关阅读:
    [翻译]跟我一起边译边学之Linux:目录
    [翻译]跟我一起边译边学之Linux:致谢 Acknowledgments
    计算机图形学资源收集01
    计算机图形学资源收集02
    计算机图形学资源收集04
    计算机图形学资源收集03
    C#二十几种设计模式事例下载(源码)
    在WinForm应用程序中嵌入WPF控件
    .net网站与Winform窗体的数据交互(JS调用Winform后台方法实现)
    C#调用rar.exe解压一个rar文件
  • 原文地址:https://www.cnblogs.com/luluping/p/10182974.html
Copyright © 2011-2022 走看看