欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#通过属性名字符串获取、设置对象属性值操作示例

程序员文章站 2023-11-15 15:13:22
本文实例讲述了c#通过属性名字符串获取、设置对象属性值操作.分享给大家供大家参考,具体如下:#通过反射获取对象属性值并设置属性值0、定义一个类 public class user { public...

本文实例讲述了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
 }