2010-04-10 242 views
1

我想創建一些自定義數據類型,但我不認爲我在問正確的問題。自定義數據類型

在整個.NET中都使用了「複合布爾」值,我想設計一些我自己的。 我一直在使用一系列的布爾變量,它的工作原理,但只是不一樣。

從.NET的例子包括: Color.Black Alignment.Centered [fontProperties] .Bold * *我忘記了實際的名字,但你的想法

我想要是這樣的:

ColorSortQualities

  • DistinguishColor
  • DistinguishNumberOfColors
  • DistinguishColorPattern

一旦這樣被宣佈,我可以這樣做:如果 (searchOptions.ColorSortQualities == DistinguishColor) [做的東西]

這是什麼叫什麼?

謝謝!

+1

是否有可能同時具有'DistinguishColor'和'DistinguishColorPattern',還是它們是互斥的? – 2010-04-10 19:37:29

回答

4

這就是所謂的枚舉,並在C#中使用關鍵字。

+0

完美!正是我在找什麼。再次感謝 – 2010-04-10 19:41:25

3

我想你想要一個枚舉與[Flags]屬性。

[Flags] 
enum ColorSortQualities 
{ 
    None = 0x0, 
    DistinguishColor = 0x1, 
    DistinguishNumberOfColors = 0x2, 
    DistinguishColorPattern = 0x4 
} 

這將讓調用者指定這些的任意組合,每個組合將被實現爲位標誌。請注意,這將允許32個選項,因爲int是一個32位的數量。

你的狀態代碼是這樣:

if((searchOptions & ColorSortQualities.DistinguishColor) == ColorSortQualities.DistinguishColor) 

如果這不是你所說的「一系列布爾變量」的意思是,請澄清。

5

使用枚舉:

enum ColorSortQualities 
    { 
     None, 
     DistinguishColor, 
     DistinguishNumberOfColors, 
     DistinguishColorPattern 
    }; 
+1

在我看來,不明確地聲明枚舉的類型與int32不同,這是不好的舉動。你是否試圖在靜態類型上保存幾個字節? – 2010-04-10 19:30:46

+0

好吧,其實我不知道它是否被認爲是好的或壞的做法,所以謝謝。 – n535 2010-04-10 19:32:12

+0

閱讀http://stackoverflow.com/questions/746812/best-practices-for-using-and-persisting-enums後,事情似乎很清楚,再次感謝你。 – n535 2010-04-10 19:39:10