我想在C#中使用lambdas和LINQ表达式执行以下操作。
public class Foo { private SomeEntity entity; public Foo(SomeEntity entity) { this.entity = entity; Bar(p => p.FirstName); Bar(p => p.SurName); } public void Bar(Expression> barExpression) { // What to do here? } }
每次我调用Bar()时,我都想深入了解Expression,并找出我所指的属性(例如FirstName或LastName),以及我当前使用的SomeEntity对象。我还需要属性的值(这实际上是最重要的)。
最终我想扩展Bar做更多的事情,但这很简单,我可以“煮”我的实验。
谢谢!
答案 0 :(得分:4)
public void Bar<T>(Expression<Func<SomeEntity, T>> expression)
{
string name = ((MemberExpression)expression.Body).Member.Name;
}
应该得到名字; p => p.FirstName
中没有实例;但是this.entity
应该给你你想要的东西。值为T value = expression.Compile()(entity)