這可能是重複的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