StackOverflow用户jolson有一段很好的代码,它举例说明了如何在不使用字符串的情况下注册menthods,而是在这里表达树.
是否可以为属性而不是方法提供类似的东西?传递属性(不是属性的名称)并在方法内部获取属性名称?
像这样的东西:
RegisterMethod(p => p.Name) void RegisterMethod(Expression??? propertyExpression) where T : Property ??? { string propName = propertyExpression.Name; }
谢谢.
我在这里发布了一个完整的例子(另见关于this
它下面的帖子)
请注意它处理LambdaExpression
等.作为已发布的代码的更新,您可以添加更多,以便在某些情况下更容易使用:
static class MemberUtil{ public static string MemberName (Expression > member) { return MemberUtil.MemberName (member); } }
然后,您可以使用泛型类型推断作为返回值:
string test1 = MemberUtil.MemberName(x => x.Bar); string test2 = MemberUtil .MemberName(x => x.Bloop());
你可以写这个:
static void RegisterMethod(Expression > expression) { var member_expression = expression.Body as MemberExpression; if (member_expression == null) return; var member = member_expression.Member; if (member.MemberType != MemberTypes.Property) return; var property = member as PropertyInfo; var name = property.Name; // ... }