2014-09-29 31 views
-1
[flags] 
enum Test 
{ 
    a=0, 
    b=1, 
    c=2 
} 
... 
var v = Test.c | Test.b; 
var str = v.ToString(); 
// str = 'b, c' 

是'str'中定義的值的順序。 b,c和c,b在語義上都是相同的。如果應用的FlagsAttribute我寫測試代碼(不是在C#)寧願沒有做花哨的邏輯解析所有可能的組合是在標誌枚舉的字符串表示中定義的值的順序

+5

實際編寫測試的速度比在此處輸入問題並不等於有人爲您測試嗎? – 2014-09-29 19:10:55

+0

爲什麼ToString()開頭? – 2014-09-29 19:12:19

+0

請澄清你的問題,然後解釋你爲什麼試圖這樣做? – 2014-09-29 19:15:37

回答

5

documentation for Enum.ToString

,有一個 - 爲什麼我不在乎一個或多個命名常量的組合等於此實例的值,那麼返回值是一個字符串,其中包含以常量名稱分隔符分隔的列表。

它沒有指定它們將按什麼順序顯示。

執行格式設置的代碼(請參閱參考源中的功能InternalFlagsFormat,這裏是:http://referencesource.microsoft.com/#mscorlib/system/enum.cs)似乎始終以相同的方式工作。

但是,由於訂單沒有記錄,您必須自己判斷更改的可能性。在過去被認爲事情不會改變的情況下被燒燬,我會非常謹慎地依賴沒有明確記錄的任何事情。

編輯由OP:有在格式化輸出

// These values are sorted by value. Don't change this 
    String[] names; 
    ulong[] values; 

這表明枚舉名稱將在枚舉值的順序出來的代碼有趣的評論。雖然如你所說 - 它不保證從版本到版本