从对象获取属性信息,而不将属性名称作为字符串

出于某些原因,我需要创建一个PropertyInfo实例的Dictionary,它对应于某些类的属性(让我们称之为EntityClass )。

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

但我还需要确定某些特定属性的值(在编译时已知)。 通常我可以做以下其中一项:

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

为了填满我的字典,我需要使用PropertyInfo实例而不是正常设置值。 但我觉得通过字符串名称获取属性并不舒服。 如果某些EntityClass发生更改,则会带来许多exception而不是编译错误。 所以,我要问的是:

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

 SomeDelegateType MyDelegate = EntityInstance.MethodX; 

理想的情况是:

 SomePropertyDelegate MyPropertyDelegate = EntityInstance.PropertyX; 

像这样的东西?

 string s = GetPropertyName( x=> x.Name ); public string GetPropertyName(Expression> lambda) { var member = lambda.Body as MemberExpression; var prop = member.Member as PropertyInfo; return prop.Name; } 

要么

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

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

不确定你需要什么,但可能会帮助你继续前进。

 public class Property { private readonly TObj _instance; private readonly PropertyInfo _propInf; public Property(TObj o, Expression> expression) { _propInf = ((PropertyInfo)((MemberExpression)expression.Body).Member); _instance = o; } public TProp Value { get { return (TProp)_propInf.GetValue(_instance); } set { _propInf.SetValue(_instance, value); } } } public class User { public string Name { get; set; } } var user = new User(); var name = new Property(user, u => u.Name); name.Value = "Mehmet"; Console.WriteLine(name.Value == user.Name); // Prints True