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


          在项目中遇到这么一个问题。需要为某些指标设置为一级指标,二级指标等。例如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:本人今天才开园,是新手。仅仅是为了记录一下项目的心得体会,也是交流经验,但是写的功力有限,望请见谅

  • 相关阅读:
    07.swoole学习笔记--tcp客户端
    06.swoole学习笔记--异步tcp服务器
    04.swoole学习笔记--webSocket服务器
    bzoj 4516: [Sdoi2016]生成魔咒
    bzoj 3238: [Ahoi2013]差异
    bzoj 4566: [Haoi2016]找相同字符
    bzoj 4199: [Noi2015]品酒大会
    后缀数组之hihocoder 重复旋律1-4
    二分查找
    内置函数--sorted,filter,map
  • 原文地址:https://www.cnblogs.com/linxiaoyang/p/3961769.html
Copyright © 2020-2023  润新知