• 如何给字段加“标签”?


          在项目中遇到这么一个问题。需要为某些指标设置为一级指标,二级指标等。例如name这个指标是一级指标,age这个指标是二级指标,其实说白了就是给实体中的字段加上“标签”。给字段加“标签”?好像不行吧。如果是一个类的话就好办了。让这个类继承一个标识接口,然后说继承了这个接口的就是一级指标,这样就行了,那么是字段怎么办呢?首先作为一个实体类,他中的字段和数据库中是对应的,所以不能做手脚,我们可以另外声明一个类,是实体类的标识加强版就行了。不多说了,看代码吧。

          首先,先看看我的实体类。

          

     1     public class Person
     2     {
     3         public string Name { set; get; }
     4 
     5 
     6         public string Age { set; get; }
     7 
     8 
     9         public string Height { set; get; }
    10 
    11 
    12         public string Weight { set; get; }
    13     }
    View Code

         下面定义我的实体类的标识加强版

     1  public class Person_Level:Entity
     2     {
     3         public string Name1 { set; get; }
     4 
     5 
     6         public string Age2 { set; get; }
     7 
     8         public string Height1 { set; get; }
     9 
    10 
    11         public string Weight2 { set; get; }
    12     }
    View Code

        为什么要这么定义呢,加强版的字段很有特点,前面是是实体中的字段,后面是1或2,表示是一级字段或二级字段。下面我们要做的就是把实体中的数据传输到实体类的标识加强版就行了。那么现在我们的主角登场了-------反射。写一个方法,将实体中的数据传递到加强版中。

     private Person_Level translate(Person p,Person_Level level){
               PropertyInfo[] p_property= p.GetType().GetProperties();
               PropertyInfo[] level_property = level.GetType().GetProperties();
    
               for (int i = 0; i < p_property.Length; i++) { //原来的
                   for (int j = 0; j < level_property.Length; j++) { //要使用的
                       if (level_property[j].Name.Contains(p_property[i].Name)) {
    
                           level_property[j].SetValue(level, (string)p_property[i].GetValue(p));
                       }
                   }
               }
                   return level;
                   
            }
    View Code

    最后验证一下,能不能传递过去。

       [Test]
            public void translateTest1()
            {
                Person p = new Person();
                p.Age = "12";
                p.Name = "linyang";
                p.Weight = "75斤";
                p.Height = "186";
                Person_Level level = translate(p, new Person_Level());
                Console.WriteLine(level.Weight2);
                Console.WriteLine(level.Height1);
                Console.WriteLine(level.Age2);
                Console.WriteLine(level.Name1);
            }
    View Code

    显示的结果为:

    75斤
    186
    12
    linyang

    实践证明获取到值了,也就实现了给实体加标示并且数据不改变的目的。

    ps:本人今天才开园,是新手。仅仅是为了记录一下项目的心得体会,也是交流经验,但是写的功力有限,望请见谅

  • 相关阅读:
    迭代器,生成器,列表推倒式
    内置函数
    递归与二分算法
    装饰器
    函数进阶
    函数
    MLP神经网络 隐含层节点数的设置】如何设置神经网络隐藏层 的神经元个数
    用CNN及MLP等方法识别minist数据集
    ubuntu 安装Pangolin 过程
    ubuntu16.04 + Kdevelop + ROS开发和创建catkin_ws工作空间
  • 原文地址:https://www.cnblogs.com/linxiaoyang/p/3961769.html
Copyright © 2020-2023  润新知