zoukankan      html  css  js  c++  java
  • C#通过属性名字符串获取、设置对象属性值


    #通过反射获取对象属性值并设置属性值

    0、定义一个类

        public class User
        { 
            public int Id { get; set; }
            public string Name { get; set; }
            public string Age { get; set; }
        }
    

    1、通过属性名(字符串)获取对象属性值

       User u = new User();
       u.Name = "lily";
       var propName = "Name";
       var propNameVal = u.GetType().GetProperty(propName).GetValue(u, null);
       
       Console.WriteLine(propNameVal);// "lily"
    
    
    

    2、通过属性名(字符串)设置对象属性值

       User u = new User();
       u.Name = "lily";
       var propName = "Name";
       var newVal = "MeiMei";
       u.GetType().GetProperty(propName).SetValue(u, newVal);
       
       Console.WriteLine(propNameVal);// "MeiMei"
    
    

    #获取对象的所有属性名称及类型

    • 通过类的对象实现
       User u = new User();
    
       foreach (var item in u.GetType().GetProperties())
       {
           Console.WriteLine($"propName:{item.Name},propType:{item.PropertyType.Name}");
       }
       // propName: Id,propType: Int32
       // propName:Name,propType: String
       // propName:Age,propType: String
    
    • 通过类实现
       foreach (var item in typeof(User).GetProperties())
       {
           Console.WriteLine($"propName:{item.Name},propType:{item.PropertyType.Name}");
       }
       // propName: Id,propType: Int32
       // propName:Name,propType: String
       // propName:Age,propType: String
    

    #判断对象是否包含某个属性

       static void Main(string[] args)
       {
           User u = new User();
           bool isContain= ContainProperty(u,"Name");// true
       }
    
    
       public static bool ContainProperty( object instance, string propertyName)
       {
           if (instance != null && !string.IsNullOrEmpty(propertyName))
           {
               PropertyInfo _findedPropertyInfo = instance.GetType().GetProperty(propertyName);
               return (_findedPropertyInfo != null);
           }
           return false;
       }
    
    • 将其封装为扩展方法
       public static class ExtendLibrary
       {
           /// <summary>
           /// 利用反射来判断对象是否包含某个属性
           /// </summary>
           /// <param name="instance">object</param>
           /// <param name="propertyName">需要判断的属性</param>
           /// <returns>是否包含</returns>
           public static bool ContainProperty(this object instance, string propertyName)
           {
               if (instance != null && !string.IsNullOrEmpty(propertyName))
               {
                   PropertyInfo _findedPropertyInfo = instance.GetType().GetProperty(propertyName);
                   return (_findedPropertyInfo != null);
               }
               return false;
           }
       }
    
       static void Main(string[] args)
       {
           User u = new User();
           bool isContain= u.ContainProperty("Name");// true
       }
    

  • 相关阅读:
    自动关联
    如何提高测试效率
    检查点
    windows server 2008 安装vs2008 的问题
    【转】xampp mysql 忘记密码的解决方案
    zencart 目录产品显示控制
    静态html文件执行php语句的方法
    UNIX主机访问PHP程序提示“Internal Server Error”的处理办法
    【转】javascript 点击 <a> 链接
    u880刷机
  • 原文地址:https://www.cnblogs.com/willingtolove/p/12198871.html
Copyright © 2011-2022 走看看