【转】C#通过属性名字符串获取、设置对象属性值


原文地址:https://www.cnblogs.com/willingtolove/p/12198871.html

#通过反射获取对象属性值并设置属性值
0、定义一个类
1、通过属性名(字符串)获取对象属性值
2、通过属性名(字符串)设置对象属性值
#获取对象的所有属性名称及类型
#判断对象是否包含某个属性

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

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
 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM