这可能是重复的mot,但我找不到合适的问题。我想从() => MyClass.Name
得到"MyClass.Name"
。如何定义方法参数以及如何将表达式转换为字符串?从表达式()中获取类名称和属性名称=> MyClass.Name
3
A
回答
4
这是一个Expression<Func<string>>
,所以你可以有:
void Foo(Expression<Func<string>> selector) {...}
或
void Foo<T>(Expression<Func<T>> selector) {...}
但是,请注意语法MyClass.Name
指静态财产;如果你想要一个实例属性,你可能需要的东西更像是一个Expression<Func<MyClass,string>>
- 例如:
static void Foo<TSource, TValue>(
Expression<Func<TSource, TValue>> selector)
{
}
static void Main() {
Foo((MyClass obj) => obj.Name);
}
至于执行; 在这个简单的例子,我们可以期待Body
是一个MemberExpression
,所以:
static void Foo<TSource, TValue>(
Expression<Func<TSource, TValue>> selector)
{
var member = ((MemberExpression)selector.Body).Member;
Console.WriteLine(member.ReflectedType.Name + "." + member.Name);
}
然而,在一般情况下更为复杂。
static void Foo<TValue>(
Expression<Func<TValue>> selector)
{
var member = ((MemberExpression)selector.Body).Member;
Console.WriteLine(member.ReflectedType.Name + "." + member.Name);
}
1
这取决于Name
是静态的属性:如果我们使用静态成员这也将正常工作。
1.如果它不是静态的,那么MyClass.Name
根本就不是一个有效的语法。因此,让我们假设,在这种情况下,你想从本地变量使用这样得到class+property
:
var instance = new MyClass();
string result = GetClassAndPropertyName(() => instance.Name);
所以对于GetClassAndPropertyName
的实施应该是这样的:
public static string GetClassAndPropertyName<T>(Expression<Func<T>> e)
{
MemberExpression memberExpression = (MemberExpression) e.Body;
return memberExpression.Member.DeclaringType.Name + "." + memberExpression.Member.Name;
}
另一种语法,你可以在Marc的发现回答。
2. Name
财产也可以是静态的,这是不可能在我的意见,但它可以让下面的语法,这是确切的语法,你已经问:
string result = GetClassAndPropertyName(() => MyClass.Name);
相关问题
- 1. SQLAlchemy从表和列名称中获取属性名称
- 2. 使用反射从属性中获取lambda表达式名称
- 3. 获取属性名称和使用lambda表达式
- 4. 获取属性名称值<input>
- 5. AutoMapperMappingException获取属性名称
- 6. 获取属性名称
- 7. 获取属性名称
- 8. 使用表达式树获取静态类属性的名称和值
- 9. c#正则表达式 - 从类文件(.cs)中选择类属性名称,方法名称和字段
- 10. 从innerHTML获取名称属性
- 11. 从xml获取属性名称
- 12. 如何获取表单名称属性
- 13. .NET:获取属性名称属性
- 14. 获取属性名称和XSLT
- 15. 获取表达式参数名称
- 16. 是否可以从属性中获取模型名称和字段名称?
- 17. BCEL - 获取类名称,元素名称和方法名称
- 18. 访问类名从属性名称
- 19. 获取python类的属性名称/获取查询的列名称
- 20. 属性类中的名称
- 21. C#设置/通过字符串名称获取类属性
- 22. 从C#中的类中获取所有属性名称
- 23. 如何使用lambda表达式和匿名类型获取某个类型的属性名称?
- 24. 在setter中获取属性名称
- 25. 从功能获取属性名称<t, T>
- 26. 使用表达式获取POCO对象属性的名称和值
- 27. 获取类名称函数的名称
- 28. 如何从该属性的getter/setter中获取属性名称?
- 29. 从属性文件中获取模式名称
- 30. 获取.NET 3.5中的Lambda表达式中使用的属性名称
`美孚((MyClass的OBJ) => obj.Name)`是我在找的东西。谢谢。 – jgauffin 2011-02-18 11:36:25