2010-12-16 41 views
2

如何快速查找我的枚舉obj並找出枚舉obj包含/不包含另一個輸入成員?關於在C#中查找枚舉成員的問題

public enum myen 
{ 
    S1, 
    S2, 
    S3, 
} 

other member like s2 or s4. 

intput s2 -> true; // included 
input s4 -> false; // not include 
+0

你究竟想要完成什麼?這是非常不真實的代碼,並不是很清楚。輸入成員是什麼意思? – Josh 2010-12-16 05:39:22

+0

@Josh,我應該使用*是定義或不*作爲關鍵字在我原來的職位。謝謝。 – 2010-12-16 05:52:27

回答

2

Enum.IsDefined或者根據你有什麼輸入使用Enum.GetNames。

// => true 
Console.WriteLine(Enum.GetNames(typeof(myen)).Any(member => member.Equals("S3"))); 
Console.WriteLine(Enum.IsDefined(typeof(myen), "S3")); 
Console.WriteLine(Enum.IsDefined(typeof(myen), 2)); 

// => false 
Console.WriteLine(Enum.GetNames(typeof(myen)).Any(member => member.Equals("S4"))); 
Console.WriteLine(Enum.IsDefined(typeof(myen), "S4")); 
Console.WriteLine(Enum.IsDefined(typeof(myen), 3)); 
+0

我找不到'IsDefined'的方法。它位於哪裏?謝謝。 – 2010-12-16 05:39:24

+0

@Nano - 這是Enum類的靜態方法。確保您在源文件中使用「系統」,以便System命名空間可以訪問。 – Gishu 2010-12-16 05:41:34

+0

雖然這不是「快速」,但假設這是一個效率問題。 – Mehrdad 2010-12-16 05:47:13

2

我建議編寫自己的Enum.IsDefined()版本,是基於仿製藥,而緩存的結果,而不是裝箱和拆箱的值;這可能會導致您在問題中提到的「快速」查找。

+0

+1它使用反射 - 所以在將其嵌入perf perf/freq調用區域之前考慮其他選項。 – Gishu 2010-12-16 06:02:54

+0

它使用反射,但實際上並不是那麼糟糕,如果你經常進行同樣的檢查(相同的枚舉),因爲對象在內部被緩存;如果緩存用完(因爲不同的枚舉被一個接一個地檢查)並且實際上必須發生反射,則它變得重要。 – Mehrdad 2010-12-16 06:15:46