私は次の拡張メソッドを持っています:
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式を使用して強い型付けを提供し、この関数を使用してプロパティの名前を文字列として取得します。この方法は反射を使用しますか?
私が尋ねる理由は、このメソッドがコードで非常に頻繁に使用されており、十分に高速であることを望んでいるためです。