GetPropertyName za statički kontekst
Na sve strane po internetu ima dokumentovanih metoda izvlačenja imena propertija iz linq izraza kako bi se zaobišlo opasno pisanje stringova uz OnPropertyChanged za INotifyPropertyChanged interfejs.
Ova metoda je za statički kontekst:
public static string GetPropertyName<T>(Expression<Func<T, object>> expression) {
return GetPropertyNameAndType(expression).Item1;
}
public static Tuple<string, Type> GetPropertyNameAndType<T>(Expression<Func<T, object>> expression) {
PropertyInfo property = GetPropertyInfo(expression);
var result = new Tuple<string, Type>(property.Name, property.PropertyType);
return result;
}
public static PropertyInfo GetPropertyInfo(LambdaExpression expression) {
if (expression == null) {
throw new ArgumentNullException("expression");
}
MemberExpression memberExpression;
if (expression.Body is UnaryExpression) {
memberExpression = ((UnaryExpression)expression.Body).Operand as MemberExpression;
} else {
memberExpression = expression.Body as MemberExpression;
}
if (memberExpression == null) {
throw new ArgumentException(@"The expression is not a member access expression", "expression");
}
var property = memberExpression.Member as PropertyInfo;
if (property == null) {
throw new ArgumentException(@"The member access expression does not access a property", "expression");
}
return property;
}
Primer poziva:
var propertyName = GetPropertyName<SomeClass>(x => x.SomeProperty);
Коментари
Постави коментар