2013-12-14 2 views
0

Рассмотрим следующие коды:Type.GetCustomAttributes <TAttribute> возвращает пользовательские атрибуты в случайном порядке

[AttributeUsage(AttributeTargets.Class)] 
public sealed class SampleAttribute : Attribute 
{ 
    public String Name {get;set}; 
    public SampleAttribute(String testName) 
    { 
      Name = testName; 
    } 
} 

[SampleAttribute("A")] 
[SampleAttribute("B")] 
public class Test 
{ 

} 

var attributes = typeof(Test).GetCustomAttributes<SampleAttribute>(); 

К сожалению, метод «GetCustomAttributes» возвращает атрибуты в случайном порядке.

Например, следующий код будет печатать разные результаты при каждом запуске приложения.

foreach(var att in attributes) 
{ 
    Console.WriteLine(att.Name); 
} 

Вовремя, сначала «A», затем «B» в другой раз наоборот.

Есть ли какие-либо решения для моей проблемы?

Я не собираюсь добавлять столбец, такой как заказ или что-то в этом роде, я бы хотел решить проблему.

Окружающая среда: .NET 4.5.1, Visual Studio 2012 Обновление 3 SDK, C# 5. Оба режима отладки и выпуска.

ответ

3

Я не думаю, что в документации есть что-либо, что гарантирует, что пользовательские атрибуты будут возвращены в любом конкретном порядке. Если вам нужны упорядоченные атрибуты, добавьте член Order в свой класс атрибутов.

+1

Или если фактический заказ не имеет значения, вам просто нужен один и тот же заказ каждый раз, независимо от того, что это за заказ, заказать что-то, что уже существует (например, 'Name' здесь) – hvd

+0

Спасибо, правильно, но я не сказал, что это проблема .NET. Есть ли какое-либо решение или настройки или любая другая вещь для решения проблемы с базы –

+0

@YasserMoradi Какая проблема? Что функция, которая не дает никаких гарантий относительно порядка элементов в ее результате, непредсказуема, когда вы смотрите на порядок элементов в ее результате? По моему опыту, в подавляющем большинстве случаев порядок будет неактуальным, и для этого и предназначен API. Это вы рассматриваете это как проблему, которая заботится о порядке, так что вам это удается. Возможно, вы можете расширить свой вопрос, чтобы объяснить, почему для вас важны вопросы порядка, и, возможно, в этом случае будет лучший подход. – hvd

Смежные вопросы