#c# #reflection #custom-attributes
#c# #отражение #пользовательские атрибуты
Вопрос:
Хорошо … итак, заголовок точно определяет, что я ищу.
Прямо сейчас я использую это решение для управления порядком:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class DefaultSortCriterionAttribute : Attribute
{
private int _priority = 0;
public int Priority
{
get
{
return _priority;
}
}
private string _parameterName;
public string ParameterName
{
get
{
return _parameterName;
}
}
private SortDirection _direction;
public SortDirection Direction
{
get
{
return _direction;
}
}
public DefaultSortCriterionAttribute(string parameterName, SortDirection direction)
{
_parameterName = parameterName;
_direction = direction;
}
public DefaultSortCriterionAttribute(int priority, string parameterName, SortDirection direction)
{
_priority = priority;
_parameterName = parameterName;
_direction = direction;
}
}
Есть предложения, как сделать это более эффективным?
Пример использования в моем универсальном классе:
Type type = typeof(T);
if (Attribute.IsDefined(type, typeof(DefaultSortCriterionAttribute)))
{
DefaultSortCriterionAttribute[] attribs = (DefaultSortCriterionAttribute[])Attribute.GetCustomAttributes(type, typeof(DefaultSortCriterionAttribute));
List<SortCriterion> list = new List<SortCriterion>();
foreach (DefaultSortCriterionAttribute attrib in attribs)
{
SortCriterion sc = new SortCriterion(attrib.ParameterName, attrib.Direction);
list.Add(sc);
}
return this.CompareTo(other, list);
}
Комментарии:
1. 1) Я действительно не понимаю, как вы используете эти три свойства… 2) Я не понимаю, почему вы не используете только одно свойство.
2. Каковы ваши критерии сортировки? Чего именно вы пытаетесь достичь с помощью этого? Более эффективным решением может быть отказ от отражения, но, не зная ваших целей, это невозможно сказать.
3. @asawyer — только что добавил пример использования атрибута в моем универсальном классе. Мне все еще нужно изменить код, чтобы отсортировать список в правильном порядке. @soandos — 1) смотрите пример. 2) одно свойство не соответствует моим требованиям.
4. Какова цель? Что делает compareTo?
5. @asawyer — добавляет функциональность сортировки по умолчанию, если объект используется в списке.
Ответ №1:
Я не могу представить лучшего подхода. Это хорошо.