У меня есть следующий метод расширения:
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 при передаче имен свойств вместо строк, чтобы обеспечить строгую типизацию, и я использую эту функцию для получения имени свойства в виде строки. Использует ли этот метод отражение?
Я спрашиваю, почему этот метод довольно часто используется в нашем коде, и я хочу, чтобы он был достаточно быстрым.