Пользовательские типы данных - PullRequest
1 голос
/ 10 апреля 2010

Я хотел бы создать несколько пользовательских типов данных, но я не думаю, что задаю правильный вопрос (ы).

В .NET используются "составные логические" значения, и я хочу создать некоторые из моих собственных. Я использовал серию булевых переменных, которая работает, но просто не то же самое.

Примеры из .NET включают: Черный цвет Alignment.Centered [FontProperties] .Bold * * Я забыл настоящее имя, но вы поняли

Я хочу сделать что-то вроде этого:

ColorSortQualities

  • Нет
  • DistinguishColor
  • DistinguishNumberOfColors
  • DistinguishColorPattern

Как только это будет объявлено, я могу сделать это: if (searchOptions.ColorSortQualities == DistinguishColor) [делать вещи]

Как это называется?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 10 апреля 2010

Используйте перечисление:

  enum ColorSortQualities
  {
       None,
       DistinguishColor,
       DistinguishNumberOfColors,
       DistinguishColorPattern
  };
4 голосов
/ 10 апреля 2010

Это называется перечислением, и в C # вы используете ключевое слово enum.

3 голосов
/ 10 апреля 2010

Я думаю, что вы хотите перечисление с атрибутом [Flags].

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

Это позволит вызывающей стороне указать любую комбинацию из тех, каждая из которых будет реализована как битовый флаг. Обратите внимание, что это позволит использовать 32 параметра, поскольку int является 32-битным значением.

Ваш код состояния будет выглядеть так:

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

Если это не то, что вы подразумеваете под «серией булевых переменных», уточните.

...