Любые предложения по определению порядка массива, возвращаемого из атрибута.GetCustomAttributes

#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:

Я не могу представить лучшего подхода. Это хорошо.