返回集合

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Data;
using System.Reflection;
using System.Collections;
using System.Data.Common;
using System.Diagnostics;

namespace ceDemo
{
    class Program
    {
        static void Main(string[] args)
        {

            List<csDemp> mdList = sp.GetDataInstanceList<csDemp>();

        }
    }

    public static class PropertyExtensions
    {
        public static void FastSetValue(this PropertyInfo propertyInfo, object obj, object value)
        {
            if (propertyInfo == null)
            {
                throw new ArgumentNullException("propertyInfo");
            }
            GetterSetterFactory.GetPropertySetterWrapper(propertyInfo).Set(obj, value);
        }
    }

    public static class GetterSetterFactory
    {
        private static readonly Hashtable s_setterDict = Hashtable.Synchronized(new Hashtable(1024));
        internal interface ISetValue
        {
            void Set(object target, object val);
        }

        internal static ISetValue GetPropertySetterWrapper(PropertyInfo propertyInfo)
        {
            var property = (ISetValue)s_setterDict[propertyInfo];
            if (property == null)
            {
                property = CreatePropertySetterWrapper(propertyInfo);
                s_setterDict[propertyInfo] = property;
            }
            return property;
        }

        internal static ISetValue CreatePropertySetterWrapper(PropertyInfo propertyInfo)
        {
            if (propertyInfo == null)
            {
                throw new ArgumentNullException("propertyInfo");
            }
            if (propertyInfo.CanWrite == false)
            {
                throw new NotSupportedException("属性不支持写操作。");
            }
            var mi = propertyInfo.GetSetMethod(true);

            if (mi.GetParameters().Length > 1)
            {
                throw new NotSupportedException("不支持构造索引器属性的委托。");
            }
            var instanceType = typeof(SetterWrapper<,>).MakeGenericType(propertyInfo.DeclaringType, propertyInfo.PropertyType);
            return (ISetValue)Activator.CreateInstance(instanceType, propertyInfo);
        }

        public static void Clear()
        {
            s_setterDict.Clear();
        }
    }

    public class SetterWrapper<TTarget, TValue> : GetterSetterFactory.ISetValue
    {
        private Action<TTarget, TValue> _setter;

        public SetterWrapper(PropertyInfo propertyInfo)
        {
            if (propertyInfo == null)
            {
                throw new ArgumentNullException("propertyInfo");
            }
            if (propertyInfo.CanWrite == false)
            {
                throw new NotSupportedException("属性不支持写操作。");
            }
            var m = propertyInfo.GetSetMethod(true);
            _setter = (Action<TTarget, TValue>)Delegate.CreateDelegate(typeof(Action<TTarget, TValue>), null, m);
        }

        public void SetValue(TTarget target, TValue val)
        {
            _setter(target, val);
        }

        public void Set(object target, object val)
        {
            _setter((TTarget)target, (TValue)val);
        }
    }

    public class sp
    {
        /// <summary>
        /// 获取实体列表
        /// </summary>
        /// <typeparam name="T">类型</typeparam>
        /// <param name="functionName">方法名</param>
        /// <param name="paramList">参数列表</param>
        /// <returns>实体列表</returns>
        public static List<T> GetDataInstanceList<T>()
        {
            List<T> lists = new List<T>();

            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("id"));
            dt.Columns.Add(new DataColumn("Name"));
            DataRow row0 = dt.NewRow();
            row0[0] = "1";
            row0[1] = "张三";
            dt.Rows.Add(row0);

            DataRow row3 = dt.NewRow();
            row3[0] = "2";
            row3[1] = "李四";
            dt.Rows.Add(row3);

            DataRow row5 = dt.NewRow();
            row5[0] = "3";
            row5[1] = "王五";
            dt.Rows.Add(row5);

            var dataType = typeof(T);
            var infos = dataType.GetProperties(BindingFlags.Instance | BindingFlags.Public);

            foreach (DataRow row in dt.Rows.AsParallel())
            {
                var obj =(T)Activator.CreateInstance(dataType);
                foreach (DataColumn col in dt.Columns.AsParallel())
                {
                    try
                    {
                        foreach (PropertyInfo info in infos)
                        {
                            if (info.Name.ToLower() == col.ColumnName.ToLower())
                            {
                                if (row[col].GetType().FullName != "System.DBNull")
                                {
                                    info.FastSetValue(obj, row[col]);
                                }
                            }
                        }
                    }
                    catch
                    {
                    }
                }
                lists.Add(obj);
            }
            GetterSetterFactory.Clear();
            return lists;
        }

        public static T GetCopy<T>()
        {
            var obj = typeof(T);
            var tar_obj = (T)Activator.CreateInstance(obj);
            Type typeinstance = obj.GetType();
            foreach (PropertyInfo property in typeinstance.GetProperties())
            {
                property.SetValue(tar_obj, property.GetValue(obj, null), null);
            }
            return tar_obj;

        }
    }

    public class csDemp
    {
        public string id { get; set; }

        public string name { get; set; }
    }

}

返回集合

时间: 2024-10-13 18:14:14

返回集合的相关文章

UWP开发:异步方法返回集合的数据绑定问题

——最近在做UWP开发,其中请求API数据的时候,往往是通过异步请求网络,再处理json数据,返回集合对象.通常,我们的做法是将集合数据在ViewModel层进行处理,让ViewModel实现ObservableCollection接口,然后在View层后台实例化ViewModel对象,前台绑定对象.这样就实现了集合的绑定和通知.这里需要注意,集合的绑定,不单单是绑定,而且要实现绑定通知,才算真正的绑定. 为什么这么说呢?看一下在开发中遇到的问题: 由于一个简单的页面,需要绑定一组集合数据,因为

mybatis返回集合类型为map时

Mybatis返回值为map时 使用条件:当映射属性超出了一个Bean时: 第一步: 第二步: 第三步: 此方式只能当返回值为lIst集合时. 原文地址:https://www.cnblogs.com/xiaofengshan/p/12347989.html

Mybatis的resultType返回集合

---恢复内容开始--- mapper映射文件: 官方指出resultType的属性详解(如下图):即不能直接指定为List,或者AarrayList,因为 我DAO层返回的数据类型是java.util.List<User>类型, 所以上面的resultType值可以直接指定为User(全路径). 当然,也可以直接指定类名称,但必须先配置TypeAliases(类别名). ---恢复内容结束---

mybatis 配置返回集合collection时只有一条记录

查询语句配置如下: <select id="selectCustomerList" resultMap="CustomerDtoMap" parameterType="map"> select * from ( select <include refid="AliasCustomerColumnList"/> from customer c ) c left join display_venue_res

jQuery的POST请求返回JSON返回集合遍历方法

MVC服务器端代码 public ActionResult saleChance(Chances obj) { ChancesBLL cb = new ChancesBLL(); List<Chances> list = cb.SelectAll(); list = list.Where(w=>w.ChanName==obj.ChanName&&w.ChanLinkMan==obj.ChanLinkMan&&w.ChanTitle==obj.ChanTit

开发笔记:用不用UnitOfWork以及Repository返回什么集合类型

这2天实际开发中明确的东西,在这篇博文中记录一下. 之前对是否需要自己封装UnitOfWork有些犹豫,因为Entity Framework就是一个UnitOfWork实现, 自己再封装一下显得有些多余. 但是在这次开发中,把涉及数据库操作的实现代码放在最后写,先完成其他层的代码.这种情况下,根本用不了EF,只能先Fake出一个UnitOfWork,这时必须要进行UnitOfWork的封装. 所以,定义了IUnitOfWork接口并实现了一个FakeUnitOfWork,简化的示例代码如下: I

DWR3.0 dwr 返回值(数组,集合,Map)

首先导入项目所需要的包,如下:dwr.jar,commons-logging-1.0.4.jar,版本可以调整 1.web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

使用泛型集合代替datatable作为返回值实现面向对象

开会的时候,师父说,我们在机房重构时,尽量不要用datatable作为返回值,改用泛型集合的方式,这样可以实现真正的面向对象.通过查资料和同学交流,把这个问题给解决了.对于泛型集合,我也有了一些认识. 一.对泛型集合的认识 1.存在于System.Collection,Generic的命名空间中,在用的时候,需要引用 2.泛型是具有占位符(类型参数)的类,结构,接口和方法.就是说,在泛型集合中加入的数据必须符合指定的类型<T>,否则编译时就会报错. 以上为设计模式培训实习生的内容. 那泛型集合

Java集合相关面试问题和答案

Java集合相关面试问题和答案 面试试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类.