Нет.Поскольку предлагаемый синтаксис возвращает значение свойства LastName
, а не само свойство.
Чтобы извлечь и использовать атрибуты, вам необходимо использовать отражение, что означает, что вам нужно знатьсамо свойство.
Как идея, вы могли бы достичь этого аккуратно с помощью библиотеки выражений LINQ, хотя и разрешить свойство для объекта.
Пример синтаксиса, который вы можете искать:
var lastNameMaxLength = AttributeResolver.MaxLength<Users>(u => u.LastName);
Где:
public class AttributeResolver
{
public int MaxLength<T>(Expression<Func<T, object>> propertyExpression)
{
// Do the good stuff to get the PropertyInfo from the Expression...
// Then get the attribute from the PropertyInfo
// Then read the value from the attribute
}
}
Этот класс оказался полезным для разрешения свойств из выражений:
public class TypeHelper
{
private static PropertyInfo GetPropertyInternal(LambdaExpression p)
{
MemberExpression memberExpression;
if (p.Body is UnaryExpression)
{
UnaryExpression ue = (UnaryExpression)p.Body;
memberExpression = (MemberExpression)ue.Operand;
}
else
{
memberExpression = (MemberExpression)p.Body;
}
return (PropertyInfo)(memberExpression).Member;
}
public static PropertyInfo GetProperty<TObject>(Expression<Func<TObject, object>> p)
{
return GetPropertyInternal(p);
}
}