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

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

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

相关·内容

没有搜到相关的合辑

领券