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
       }
    

  • 相关阅读:
    转载+自己心得
    分享
    领域驱动设计系列文章汇总
    ABP集合贴
    MVC学习系列——参考
    MVC学习系列——RazorViewEngine扩展
    MVC学习系列——Model验证扩展
    MVC学习系列——HtmlHelper扩展
    MVC学习系列——ModelBinder扩展
    MacBook强制清除gardle缓存
  • 原文地址:https://www.cnblogs.com/willingtolove/p/12198871.html
Copyright © 2011-2022 走看看