是否有一種方法可以獲取傳入函數的值的屬性名稱?獲取屬性名稱
Q
獲取屬性名稱
3
A
回答
5
你問這是否可能?
public void PrintPropertyName(int value) {
Console.WriteLine(someMagicCodeThatPrintsThePropertyName);
}
// x is SomeClass having a property named SomeNumber
PrintInteger(x => x.SomeNumber);
和「SomeNumber」將被打印到控制檯上?
如果是這樣,沒有。這顯然是不可能的(提示:PrintPropertyName(5)
會發生什麼?)。但是,你可以這樣做:
public static string GetPropertyName<TSource, TProperty>(this Expression<Func<TSource, TProperty>> expression) {
Contract.Requires<ArgumentNullException>(expression != null);
Contract.Ensures(Contract.Result<string>() != null);
PropertyInfo propertyInfo = GetPropertyInfo(expression);
return propertyInfo.Name;
}
public static PropertyInfo GetPropertyInfo<TSource, TProperty>(this Expression<Func<TSource, TProperty>> expression) {
Contract.Requires<ArgumentNullException>(expression != null);
Contract.Ensures(Contract.Result<PropertyInfo>() != null);
var memberExpression = expression.Body as MemberExpression;
Guard.Against<ArgumentException>(memberExpression == null, "Expression does not represent a member expression.");
var propertyInfo = memberExpression.Member as PropertyInfo;
Guard.Against<ArgumentException>(propertyInfo == null, "Expression does not represent a property expression.");
Type type = typeof(TSource);
Guard.Against<ArgumentException>(type != propertyInfo.ReflectedType && type.IsSubclassOf(propertyInfo.ReflectedType));
return propertyInfo;
}
用法:
string s = GetPropertyName((SomeClass x) => x.SomeNumber);
Console.WriteLine(s);
和現在的 「SomeNumber」 將被打印到控制檯。
2
號的物業進行評估函數被調用之前,並且在功能的實際值將是值的副本,而不是物業本身。
5
只有當您使用拉姆達時,即,
SomeMethod(()=>someObj.PropName);
(一個具有該方法採取一個輸入表達式樹,而不是僅僅一個值的)
然而,這仍需要相當多的處理來解決,並涉及反射和表達。除非絕對必要,否則我會避免這樣做只爲了這個,不值得學習表達。
相關問題
- 1. AutoMapperMappingException獲取屬性名稱
- 2. 未獲取名稱屬性
- 3. 獲取屬性名稱
- 4. .NET:獲取屬性名稱屬性
- 5. 按屬性值獲取屬性名稱
- 6. 獲取屬性名稱的默認值
- 7. 從JSON獲取元素屬性名稱
- 8. 獲取JSON對象屬性名稱
- 9. 從xml獲取屬性名稱
- 10. VBA:從xml中獲取屬性名稱
- 11. Java獲取名稱屬性的值
- 12. 獲取子屬性名稱強類型
- 13. 按名稱獲取ActiveRecord的屬性
- 14. 如何獲取屬性列的名稱?
- 15. 通過變量名稱獲取屬性
- 16. 通過名稱獲取屬性
- 17. 獲取選擇框的名稱屬性
- 18. 在Grails中獲取bean屬性名稱
- 19. 獲取C#中的屬性名稱
- 20. NHibernate ClassMap獲取屬性的列名稱
- 21. Android KSoap2:如何獲取屬性名稱
- 22. 按屬性名稱獲取HTML元素
- 23. 使用Scrapy獲取屬性名稱XPATH
- 24. 反射 - 獲取屬性名稱
- 25. 獲取屬性名稱值<input>
- 26. 動態獲取對象屬性名稱
- 27. 獲取波科屬性名稱
- 28. 反射:獲取靜態屬性名稱
- 29. 獲取值來自的屬性名稱
- 30. 獲取屬性名稱和XSLT
@Adeel不要這麼快就編輯。給這個人一個機會去編輯他自己的東西!我認爲等待五分鐘是恭敬的。 – 2010-11-04 17:17:32
@Josh - 我不介意;我在iPod上,所以我不會注意到,除非他編輯 – 2010-11-04 17:18:23
@Josh是的,我會照顧它。感謝您的建議。 – Adeel 2010-11-04 17:19:07