我有以下的擴展方法:從linq表達式中檢索信息時使用反射嗎?
public static string ToPropertyName<T,E>(this Expression<Func<E, T>> propertyExpression)
{
if (propertyExpression == null)
return null;
string propName;
MemberExpression propRef = (propertyExpression.Body as MemberExpression);
UnaryExpression propVal = null;
// -- handle ref types
if (propRef != null)
propName = propRef.Member.Name;
else
{
// -- handle value types
propVal = propertyExpression.Body as UnaryExpression;
if (propVal == null)
throw new ArgumentException("The property parameter does not point to a property", "property");
propName = ((MemberExpression)propVal.Operand).Member.Name;
}
return propName;
}
我使用LINQ表達傳遞屬性名稱時的字符串而不是提供強有力的打字和我用這個功能來檢索屬性作爲字符串的名稱。此方法是否使用反射?
我的理由是這個方法在我們的代碼中使用了很多,我希望它足夠快。
也看到http://stackoverflow.com/questions/4803272/in-c-is-expression-api-better-than-reflection?lq=1 – nawfal 2013-02-03 08:47:07
[基於lambda表達式的反射vs普通反射]的可能重複(http:// stackoverflow。COM /問題/ 2697655 /λ-表達爲基礎的反射-VS-正常反射) – nawfal 2013-04-17 10:38:24