Enum上的位操作

Car*_*rra 3 c# enums bit bitwise-operators

我遇到以下问题:

  • 我想获得列集合的第一个可见AND冻结列.

我想这会做到:

DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
     DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
Run Code Online (Sandbox Code Playgroud)
  • 是否也可以使用位掩码来获得第一个冻结的OR可见列?

Mar*_*ell 5

实施是AFAIK,"所有这些" - 它使用:

((this.State & elementState) == elementState);
Run Code Online (Sandbox Code Playgroud)

哪个是"全部".如果你想编写一个"any of",也许可以添加一个帮助方法:(之前添加"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;
    }
Run Code Online (Sandbox Code Playgroud)

或者使用LINQ:

        return columns.Cast<DataGridViewColumn>()
            .FirstOrDefault(col => (col.State & states) != 0);
Run Code Online (Sandbox Code Playgroud)