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方法稍加修改即可。

    读者应该不难自己完成。

  • 相关阅读:
    零点定理、介值定理
    古今数学史
    古今数学史
    StreamDM:基于Spark Streaming、支持在线学习的流式分析算法引擎
    StreamDM:基于Spark Streaming、支持在线学习的流式分析算法引擎
    随机化算法(二)
    随机化算法(二)
    机器学习算法时间复杂度的考虑
    机器学习算法时间复杂度的考虑
    matlab 工具函数、matlab toolbox(工具箱)
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/12167948.html
Copyright © 2011-2022 走看看