2013-12-14 23 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 Update 3 SDK,C#5.調試和發佈模式。

回答

3

我不認爲在任何地方的文檔中有任何保證自定義屬性將以任何特定順序返回的內容。如果您需要訂購屬性,請將Order成員添加到您的屬性類。

+1

或者如果實際順序無關緊要,無論順序是什麼,每次都需要相同的順序,通過已有的東西(例如'Name')排序 – hvd

+0

謝謝,是的,對了,但我沒有說這是一個.NET問題。有沒有解決方案或設置或任何其他的東西來解決基地 –

+0

@YasserMoradi問題有什麼問題?當您查看結果中項目的順序時,無法保證其結果中項目順序的函數是不可預知的?根據我的經驗,絕大多數情況下,訂單將無關緊要,這就是API的設計目的。這是你認爲這是一個問題,誰在乎秩序,所以這是你的排序。也許你可以擴展你的問題來解釋爲什麼順序對你很重要,也許在這種情況下,會有更好的方法。 – hvd