出于某些原因,我需要创建一个字典,其中包含与某些类的属性(我们称之为 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/