c# - 从对象获取属性信息而不将属性名称作为字符串提供

标签 c# reflection properties propertyinfo

出于某些原因,我需要创建一个字典,其中包含与某些类的属性(我们称之为 EntityClass)相对应的 PropertyInfo 实例。

好的,我可以使用 typeof(EntityClass).GetProperties()

但我还需要确定一些特定属性的值(在编译时已知)。 通常我可以执行以下操作之一:

EntityInstance.PropertyX = Value;
typeof(EntityClass).GetProperty("PropertyX").SetValue(EntityInstance, Value, null);

为了填充我的字典,我需要使用 PropertyInfo 实例而不是仅仅正常地设置值。但我觉得通过字符串名称获取属性并不方便。如果某个 EntityClass 发生变化,它会带来很多异常而不是编译错误。所以,我要问的是:

如何在不传递字符串名称的情况下获取已知属性的 PropertyInfo? 如果有像代表一样的东西,我会很高兴:

SomeDelegateType MyDelegate = EntityInstance.MethodX;

理想情况下:

SomePropertyDelegate MyPropertyDelegate = EntityInstance.PropertyX;

最佳答案

是这样的吗?

string s = GetPropertyName<User>( x=> x.Name );

public string GetPropertyName<T>(Expression<Func<T, object>> lambda)
{
    var member = lambda.Body as MemberExpression;
    var prop = member.Member as PropertyInfo;
    return prop.Name;
}

public PropertyInfo GetPropertyInfo<T>(Expression<Func<T, object>> lambda)
{
    var member = lambda.Body as MemberExpression;
    return member.Member as PropertyInfo;
}

public class User
{
    public string Name { set; get; }
}

关于c# - 从对象获取属性信息而不将属性名称作为字符串提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16777292/

相关文章:

c# - 在不锁定资源的情况下使用 BitMap 对象

c# - 如果输入为 null,我可以从 LINQ 语句返回 null 吗?

c# - 使用反射设置对象属性

C# 动态类型初始化器

c# - 获取项目中的所有类名

c# - 如何在PropertyGrid中编辑根行中的可扩展对象?

c# - 如何使用WPF进度条?

python - Pandas DataFrame子类的属性 setter

c# - C# 中自动生成的属性

Python属性