Битовые операции на Enum - PullRequest
       28

Битовые операции на Enum

3 голосов
/ 26 марта 2009

У меня проблемы со следующим:

  • Я хочу получить первый видимый И замороженный столбец коллекции столбцов.

Я думаю, что это сделает это:

DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
     DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
  • Можно ли сделать битовую маску для получения первого замороженного ИЛИ видимого столбца?

Ответы [ 2 ]

5 голосов
/ 26 марта 2009

Реализация, AFAIK, "все это" - она ​​использует:

((this.State & elementState) == elementState);

Что есть "все из". Если вы хотите написать «любой из», возможно, добавьте вспомогательный метод: (добавьте «this» перед DataGridViewColumnCollection, чтобы сделать его методом расширения C # 3.0 в)

    public static DataGridViewColumn GetFirstColumnWithAny(
        DataGridViewColumnCollection columns, // optional "this"
        DataGridViewElementStates states)
    {
        foreach (DataGridViewColumn column in columns)
        {
            if ((column.State & states) != 0) return column;
        }
        return null;
    }

Или с LINQ:

        return columns.Cast<DataGridViewColumn>()
            .FirstOrDefault(col => (col.State & states) != 0);
1 голос
/ 26 марта 2009

Ну, битовые маски обычно работают так:

| объединяет флаги. & фильтрует поднабор флагов из набора флагов, представленного битовой маской. ^ переключает флаги по маске (по крайней мере, в C / C ++).

Чтобы получить первый замороженный ИЛИ видимый столбец GetFirstColumn должен обрабатывать битовые маски другим способом (например, GetFirstColumn может получить первый столбец, который соответствует любому из установленных флагов, но это не так).

...