2011-06-16 153 views
1

想象一下羅列:.NET枚舉類型有多個定義

public enum eMyEnum 
{ 
    cValue1 = 0, 
    cValue2 = 1, 
    cValue2_too = 1, 
    cValue3 = 5 
} 

有沒有辦法超過遍歷所有的值(不是標籤)?如果我嘗試

var values = typeof(eMyEnum).GetEnumValues(); 

我結束了{cValue1,cValue2,cValue2,cValue3},而我正在尋找一種方法來檢索{cValue1,cValue2,cValue3}。注:我故意留1和5

+0

cValue2和cValue2_too應該是相同的嗎?如果是這樣,那麼你是(ab)使用枚舉的東西,他們不是爲了設計。你的問題可能與一些從int到enum(這完全有效)在引擎蓋下投射有關。 – JohnL 2011-06-16 12:48:39

+0

@JohnL:from msdn:「您可以將任何值賦予枚舉類型的枚舉數列表中的元素」(cfr。http://msdn.microsoft.com/en-us/library/cc138362.aspx) – xtofl 2011-06-16 13:14:37

+0

Right ,但是AFAIK就是這樣,你可以在整數之間來回轉換它們,並使值有意義。我沒有看到那篇文章上的任何內容,表明重複的值會有意義 - 爲什麼你需要這個,只是出於興趣? – JohnL 2011-06-16 13:44:41

回答

2

這是VB.NET語法,如果有人有興趣:

[Enum].GetValues(GetType(eMyEnum)).Cast(of eMyEnum).Distinct 

GetType(eMyEnum).GetEnumValues().Cast(of eMyEnum).Distinct 

所以這應該是C#版本(不能測試):

Enum.GetValues(typeof(eMyEnum)).Cast<eMyEnum>().Distinct 

typeof(eMyEnum).GetEnumValues().Cast<eMyEnum>().Distinct 
3

之間的差距這應該工作:

var values = typeof(eMyEnum).GetEnumValues().Select(v => (int)v).Distinct(); 
+0

張貼我的回覆後,我注意到你和哇,我花了12分鐘,以確保我的表情做正確的事情! – Maverik 2011-06-16 13:00:00

0

的LINQ可以來拯救這個:

IEnumerable<eMyEnum> values = typeof(eMyEnum).GetEnumValues() 
           .Cast<int>().Distinct().Cast<eMyEnum>(); 

注意,這將讓你只cValue2而不是cValue2_too我想。