首页
学习
活动
专区
工具
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);
}

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

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

相关·内容

57秒

Jquery如何获取和设置元素内容?

6分43秒

Java零基础-367-通过反射获取注解对象属性的值

1分43秒

JavaSE进阶-135-通过常量获取最大值和最小值

24分35秒

JavaScript教程-31-设置和获取文本框的value【动力节点】

16分45秒

131-通过控制器方法的形参获取请求参数和@RequestParam的使用

14分37秒

9. 尚硅谷_佟刚_Struts2_通过和 ServletAPI 耦合的方式获取 WEB 资源

10分58秒

41_尚硅谷_MyBatis_通过resultMap解决字段名和属性名的映射关系

6分27秒

39_尚硅谷_MyBatis_通过字段别名解决字段名和属性名的映射关系

6分59秒

40_尚硅谷_MyBatis_通过全局配置mapUnderscoreToCamelCase解决字段名和属性名的映射关系

7分1秒

086.go的map遍历

9分56秒

055.error的包装和拆解

1分19秒

020-MyBatis教程-动态代理使用例子

领券