несколько значений в параметре
От: oRover Украина  
Дата: 08.05.04 15:11
Оценка:
Как делается сабж. Например

MyMethod(Location.Top|Location.Center);

т.е. я хочу чтобы скажем текст располагался по центру И сверху (или в данном случае надо юзать &)?

и как оптимальным образом это парсить? (Location — это перечисление)

switch(location)
{
    case "Top":
        // bla-bla-bla...
        break;
        
    case "Center":
        // ...
        break;
}


так пойдет?
... << RSDN@Home 1.1.3 stable >>
Re: несколько значений в параметре
От: fist Россия  
Дата: 08.05.04 16:05
Оценка: 4 (1)
Здравствуйте, oRover, Вы писали:


Вы имеете ввиду, битовые флаги.
В общем то отличия от обычного перечисления особого нет, правда следует задавать явно числовые значения .

[Flags]
enum Location {
  Top    = 0x0001,
  Left   = 0x0002,
  Center = 0x0004
}

Атрибут [Flags] можно и упустить, правда он него зависит результат ToString

R>MyMethod(Location.Top|Location.Center);

R>т.е. я хочу чтобы скажем текст располагался по центру И сверху
да, правильно

R>и как оптимальным образом это парсить?


С помощью &
if ( (location & Location.Top) !=0  ){}
Re[2]: несколько значений в параметре
От: oRover Украина  
Дата: 12.05.04 11:56
Оценка:
Здравствуйте, fist, Вы писали:

F>Здравствуйте, oRover, Вы писали:



F>Вы имеете ввиду, битовые флаги.

F>В общем то отличия от обычного перечисления особого нет, правда следует задавать явно числовые значения .

зачем они нужны и как их задавать?

F>
F>[Flags]
F>enum Location {
F>  Top    = 0x0001,
F>  Left   = 0x0002,
F>  Center = 0x0004
F>}
F>

F>Атрибут [Flags] можно и упустить, правда он него зависит результат ToString

R>>MyMethod(Location.Top|Location.Center);

R>>т.е. я хочу чтобы скажем текст располагался по центру И сверху
F>да, правильно


R>>и как оптимальным образом это парсить?


F>С помощью &

F>
F>if ( (location & Location.Top) !=0  ){}
F>


и что, все варианты так перебирать?
... << RSDN@Home 1.1.3 stable >>
Re[3]: несколько значений в параметре
От: rus blood Россия  
Дата: 12.05.04 12:33
Оценка:
F>>С помощью &
F>>
F>>if ( (location & Location.Top) !=0  ){}
F>>


R>и что, все варианты так перебирать?


Заведи два перечисления — горизонтальный и вертикальный location...
Имею скафандр — готов путешествовать!
Re: несколько значений в параметре
От: Воронков Василий Россия  
Дата: 12.05.04 12:40
Оценка:
"oRover" <20111@news.rsdn.ru> wrote in message news:632706@news.rsdn.ru...
> Как делается сабж. Например
>
> MyMethod(Location.Top|Location.Center);

Вообще если тебе нужно определять локейшин в 2х-мерном пространстве, то лучше все-таки (ИМХО) использовать не флаги, а расширить соответствующим образом энумерации, так как получится более наглядно. Например, как сделано в ContentAlignment.
Posted via RSDN NNTP Server 1.9 alpha
Re[2]: несколько значений в параметре
От: Spark2K Россия  
Дата: 12.05.04 12:47
Оценка:
Здравствуйте, fist, Вы писали:

F>
F>[Flags]
F>enum Location {
F>  Top    = 0x0001,
F>  Left   = 0x0002,
F>  Center = 0x0004
F>}
F>


Есть еще один наглядный способ записи:

enum Location {
 Top    = 1 << 0,
 Left   = 1 << 1,
 Center = 1 << 2,
 Bottom = 1 << 3
}
Re[3]: несколько значений в параметре
От: fist Россия  
Дата: 12.05.04 15:50
Оценка:
Здравствуйте, oRover, Вы писали:


F>>Вы имеете ввиду, битовые флаги.

F>>В общем то отличия от обычного перечисления особого нет, правда следует задавать явно числовые значения .

R>зачем они нужны и как их задавать?


Просто ссылки на идентификаторы, которые описывают данный тип (Top, Left, ...) компилятор преобразует в числовое значение. По умолчанию 0,1,...
Вам же нужно так задать числовые значения, чтоб однозначно можно было определить задано ли данное свойство или нет.
Степени двойки задавать не обязательно.



F>>С помощью &

F>>
F>>if ( (location & Location.Top) !=0  ){}
F>>


R>и что, все варианты так перебирать?


Для битовых флагов да.
Re[3]: несколько значений в параметре
От: mihailik Украина  
Дата: 13.05.04 10:08
Оценка: 11 (3)
SK>
SK>enum Location {
SK> Top    = 1 << 0,
SK> Left   = 1 << 1,
SK> Center = 1 << 2,
SK> Bottom = 1 << 3
SK>}
SK>


Для длинных енумов лучше так:

public enum States
{
    Read    = 1,
    Write   = Read <<1,
    Modify  = Write <<1,
    Correct = Modify <<1,
    Commit  = Correct <<1
        
        ...
}


Легче потом добавлять-удалять. Микрософт, кстати, то же советует в рекомендациях.
... << RSDN@Home 1.1.3 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.