首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#通过变量名获取和设置属性

在C#中,可以通过变量名获取和设置属性。以下是一些常用的方法:

  1. 使用反射:
代码语言:csharp
复制
using System.Reflection;

public static object GetPropertyValue(object obj, string propertyName)
{
    return obj.GetType().GetProperty(propertyName).GetValue(obj, null);
}

public static void SetPropertyValue(object obj, string propertyName, object value)
{
    obj.GetType().GetProperty(propertyName).SetValue(obj, value, null);
}
  1. 使用动态类型:
代码语言:csharp
复制
using System.Dynamic;

public static object GetPropertyValue(object obj, string propertyName)
{
    dynamic dynObj = obj;
    return dynObj.GetType().GetProperty(propertyName).GetValue(obj, null);
}

public static void SetPropertyValue(object obj, string propertyName, object value)
{
    dynamic dynObj = obj;
    dynObj.GetType().GetProperty(propertyName).SetValue(obj, value, null);
}
  1. 使用Expression:
代码语言:csharp
复制
using System.Linq.Expressions;

public static object GetPropertyValue(object obj, string propertyName)
{
    var param = Expression.Parameter(obj.GetType(), "x");
    var property = Expression.Property(param, propertyName);
    var lambda = Expression.Lambda(property, param);
    var getter = (Func<object, object>)lambda.Compile();
    return getter(obj);
}

public static void SetPropertyValue(object obj, string propertyName, object value)
{
    var param = Expression.Parameter(obj.GetType(), "x");
    var property = Expression.Property(param, propertyName);
    var valueExpr = Expression.Constant(value);
    var assignExpr = Expression.Assign(property, valueExpr);
    var lambda = Expression.Lambda<Action<object>>(assignExpr, param);
    var setter = lambda.Compile();
    setter(obj);
}

这些方法可以通过变量名获取和设置属性。请注意,这些方法可能会带来一定的性能损失,因此在性能敏感的场景中应谨慎使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • JavaScript之获取设置元素属性

    1.与我前面的随笔获取元素的那些方法不同http://www.cnblogs.com/GreenLeaves/p/5689075.html 获取元素属性的方法getAttribute()不属于document...对象,所以不能通过document对象调用。...注意:他只能通过元素节点对象调用,但是可以与获取元素的方法getElementsByTagName()、getElementsById()等方法连用;如下代码: <div id="...elements[i].getAttribute('class')); } 输出:a,b,c   说明:getAttribute()方法只能<em>获取</em>单个元素节点的<em>属性</em>值...,且不属于document对象,属于单个元素节点对象; 2.在前面随便中介绍的方法几乎都是<em>获取</em>元素节点的信息,setAttribute()有点不同,这个方法是用来<em>设置</em>节点的<em>属性</em>值;他<em>和</em>getAttribute

    1.4K100

    如何通过反射获取属性的名字属性类型

    显然我们事先不知道要查哪个表,泛型dao的基本要求就是对所有的表都适用,这就需要我们动态的获取表名,基本思想可以是方法中传入一个类(前提是数据库中的表实体类都是一一对应的)的实例,通过反射获取这个实体类中的属性属性类型...反射是java中一个很重要的特性,在不知道类中信息的时候,利用反射我们可以获取到类中所有的信息,例如属性名,属性类型,方法名,还可以执行类中的方法,很强大的,在框架中大多数也是采用反射获取类中的信息。...(Object object) {         //获得类         Class clazz = object.getClass();         // 获取实体类的所有属性信息,返回Field...,包括权限修饰符,属性类型,属性名,这里的String是java.lang.String,属性属性类型后面可以利用字符串截取获得实际想要的数据。...(); 输出的是: int class java.lang.String class java.lang.String int 独立获取属性名: String name = field.getName(

    3.7K20

    通过反射方式无法获取对象属性

    .在计算签名时传递的是子类对象,子类对象使用反射方式调用getDeclaredFields()方法无法获取到从父类继承的属性 原因追溯 通过反射方法getDeclaredFields()获取到的仅仅是在类自身中定义的属性...,包括public、protected、private属性,但不包括任何继承的属性(即使继承的属性为public类型也不能获取到)。...:2 System.out.println(declaredFields.length); 解决办法 使用反射方法getFields()就可以获取到从父类继承的所有public属性(注意:只能获取到从父类继承的所有...public属性,其他非public属性是无法获取到的)。...// 从父类获取到所有public属性,输出:3 Field[] fields = reflect.getClass().getFields(); System.out.println(fields.length

    2.9K20

    前端学习(48)~通过style对象获取设置行内样式

    style属性获取修改 在DOM当中,如果想设置样式,有两种形式: className(针对内嵌样式) style(针对行内样式) 这篇文章,我们就来讲一下style。...= "red"; // 驼峰命名法 备注:我们通过style属性设置的样式都是行内样式,而行内样式有较高的优先级。...(3)值是字符串,没有设置值是“”。 (4)命名规则,驼峰命名。 (5)只能获取行内样式,内嵌外链无关。 (6)box.style.cssText = “字符串形式的样式”。...(2)IEopera的做法: obj.currentStyle; 注意: 如果当前元素没有设置该样式,则获取它的默认值。...通过currentStylegetComputedStyle()读取到的样式都是只读的,不能修改,如果要修改必须通过style属性。 综合上面两种写法,就有了一种兼容性的写法,同时将其封装。

    1.4K20
    领券