利用反射,把数组里的数据变成指定类对象里的

朋友遇到的一个问题:

从文本里读出的字符串("张三","20"...),类型以字符串形式已知("string","int"....)

希望转换成类对象。

数据多的情况下,频繁使用反射有可能影响效率,故写了个小demo如下:

Person类:

1 class Person
2     {
3         public string xm { get; set; }
4         public int nl { get; set; }
5         public void showme()
6         {
7             Console.WriteLine("我是" + xm + ",我今年" + nl + "岁。");
8         }
9     }

转换辅助类:

class Convert_Helper
    {
        static PropertyInfo[] ps;
        //送入类型,反射回所有公共属性
        public static void get_Props<T>(T tt)
        {
            ps=tt.GetType().GetProperties();
        }
        //送入字符串和类型,返回指定类型的值
        public static dynamic change_Type(string x,string x_type)
        {
            if(x_type=="int")
            {
                return int.Parse(x);
            }
            return x;
        }

        //送入对象、值和类型,为对象赋值。
        public static void get_Object(dynamic obj,string[] myvalues,string[] valuetype)
        {
            for (int i = 0; i < myvalues.Length; i++)
            {
                ps[i].SetValue(obj, change_Type(myvalues[i], valuetype[i]), null);
            }
        }
    }

主程序:

 1 static void Main(string[] args)
 2         {
 3             string[] v1,t1;
 4             List<Person> mylist=new List<Person>();
 5             Person t;
 6             Convert_Helper.get_Props(new Person());
 7
 8             t = new Person();
 9             v1=new string[2]{"张三","20"};
10             t1 = new string[2] { "string", "int" };
11             Convert_Helper.get_Object(t,v1,t1);
12             mylist.Add(t);
13
14             t = new Person();
15             v1 = new string[2] { "李四", "18" };
16             t1 = new string[2] { "string", "int" };
17             Convert_Helper.get_Object(t, v1, t1);
18             mylist.Add(t);
19
20             foreach (var item in mylist)
21             {
22                 item.showme();
23             }
24             Console.ReadKey();
25         }

到此,文本即使是批量的二维数组或其他格式,主程序稍加修改即可;如果属性不对应,对get_Props方法稍加修改即可。

读者应该不难自己完成。

原文地址:https://www.cnblogs.com/wanjinliu/p/12167948.html

时间: 2024-08-28 19:33:05

利用反射,把数组里的数据变成指定类对象里的的相关文章

把数组中的数据按照指定个格式拼接成一个字符串

/* * 需求:把数组中的数据按照指定个格式拼接成一个字符串 * 举例: *         int[] arr = {1,2,3};     * 输出结果: *        "[1, 2, 3]" * 分析: *         A:定义一个字符串对象,只不过内容为空 *         B:先把字符串拼接一个"[" *         C:遍历int数组,得到每一个元素 *         D:先判断该元素是否为最后一个 *             是:就直接

String-需求:把数组中的数据按照指定的格式拼接成一个字符串

package cn.lianxi; /* * 需求:把数组中的数据按照指定的格式拼接成一个字符串 * 举例: * int [] arr = {1,2,3}; * 输出结果 * “[1, 2, 3]” * 分析: * 1.定义一个字符串对象,只不过内容为空 * 2.把字符串拼接一个“[” * 3.遍历数组,得到每一个元素 * 4.先判断该元素是否为最后一个 * 是:就直接拼接元素和] * 不是:就拼接元素和逗号以及空格 * 5.输出拼接后的字符串 * */ public class zifu {

【iOS开发-44】通过案例谈iOS代码重构:合并、格式化输出、宏变量、利用数组字典存储数据,以及利用plist的终极知识

首先我们今天的案例就是如下5个页面通过上一张下一张来切换: (1)第一步,基本是以很傻很直接的方式来创建,这里用到的主要点有: --把对象变量设置为全局变量使得可以在其他方法中调用来设置它们的属性 --设置了一个全局变量index,默认是0,然后通过增加减少这个index值并结合switch来调用不同的数据. --利用先调用一次change方法初始化页面,使得页面定格在第一帧. --利用按钮的enabled属性来设置按钮是否可以被点击,然后结合index的值分别在第1张和第5张时分别把上一张和下

用反射机制实现对数据库数据的增、查例子

一.什么是反射机制        简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,    那么就可以通过反射机制来获得类的所有信息.二.哪里用到反射机制        有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学jdbc时用过一行代码,    Class.forName("com.mysql.jdbc.Driver.class").newInstance();但是那时候只知道那行代码是生成    驱动对象实例,并不知道它

利用反射代替switch -转

原文地址:http://www.cnblogs.com/vipsoft/archive/2012/10/19/2731126.html 根据传进来不同的值,调用不同的方法 protected void btn_SwitchClick(object sender, EventArgs e) { string result = ""; switch (ddlMethod.SelectedValue) { case "A": result = SwitchTest.Get

利用反射动态操作数组

java语言中,数组对象并不是从某个类实例化出来的,而是JVM动态创建的.对数组对象使用如下操作,可看到数组对应的Class对象.通过RTTI(Run-Time Type Information)可直接检查数组的运行时类型,以及它的签名.下方的 "[L"就是int[]/Integer[] 的运行类型. 1 Integer[] integers = (Integer[]) Array.newInstance(Integer.class,4); 2 System.out.println(i

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与

利用反射处理多个表结构相同的数据的查询和数据库表的关联

最近做一个项目,需要对人口数据进行查询,但是人口数据分布在不同的街道表中,首先进行了数据表结构的统一,每个数据表以街道名开头,然后其他的名字都一样 前期将各个表中的字段也进行了统一 抽象出一张字典表 将街道编号和街道的名字的首字母连接起来,因为查询的时候是利用街道编号来的,这样可以根据街道标号拼出相对于的街道表的名字,(每个人口相关的表不止一张,因此需要统一):在查询过程中,将查询到的结构返回一个LIST,(不同的表在dao中当然对于不同的类啊,返回来再判断是哪一类),然后利用反射Field[]

DataTable转任意类型对象List数组-----工具通用类(利用反射和泛型)

public class ConvertHelper<T> where T : new() { /// <summary> /// 利用反射和泛型 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static List<T> ConvertToList(DataTable dt) { //