zoukankan      html  css  js  c++  java
  • 利用反射,把数组里的数据变成指定类对象里的

    朋友遇到的一个问题:

    从文本里读出的字符串("张三","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方法稍加修改即可。

    读者应该不难自己完成。

  • 相关阅读:
    计算机网络【10】—— Cookie与Session
    计算机网络【9】—— HTTP1.0和HTTP1.1的区别及常见状态码
    计算机网络【8】—— Get和Post请求的区别
    计算机网络【7】—— TCP的精髓
    数据库事务的四大特性以及事务的隔离级别
    JavaWeb基础【1】—— Tomcat
    Get current time and date on Android
    Converting Storyboard from iPhone to iPad
    iPhone OS 开发
    (译)iOS Code Signing: 解惑
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/12167948.html
Copyright © 2011-2022 走看看