我需要一个函数,它将以下内容作为参数:
目前我这样做的方式相当不方便:
public static void Add<TEntity, TProperty>(TEntity e, Expression<Func<TProperty>> expression)
{
var type = typeof(TEntity);
var propertyName = ((MemberExpression) expression.Body).Member.Name;
}
这会产生如下函数调用:Add(Foo, () => Foo.Bar);
然而,有了这个解决方案,我有几个问题:
Add(Foo.Bar.Element.Type, () => Foo.Bar.Element.Type.Name)
并且看起来很丑陋。propertyName
是对象类型的属性。
e
做任何事情,因此没有使用它。有更好的解决方案吗?
答案 0 :(得分:2)
您可以通过向lambda添加参数来解决第一个问题:
public static void Add<TEntity, TProperty>(TEntity e, Expression<Func<TEntity, TProperty>> expression)
Add(Foo.Bar.Element.Type, x => x.Name)