C# 枚举上的位操作

C# 枚举上的位操作,c#,enums,bit,bitwise-operators,C#,Enums,Bit,Bitwise Operators,我在以下方面遇到一些问题: 我想获取列集合中第一个可见且冻结的列 我认为这样可以做到: DataGridViewColumnCollection dgv = myDataGridView.Columns; dgv.GetFirstColumn( DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen); 是否也可以制作位掩码以获取第一个冻结或可见列 该实现可以说是“所有这些”-它使用: ((thi

我在以下方面遇到一些问题:

  • 我想获取列集合中第一个可见且冻结的列
我认为这样可以做到:

DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
     DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
  • 是否也可以制作位掩码以获取第一个冻结或可见列

该实现可以说是“所有这些”-它使用:

((this.State & elementState) == elementState);
这就是“全部”。如果您想编写一个“any of”,可以添加一个helper方法: (在
DataGridViewColumnCollection
之前添加“this”,使其成为中的C#3.0扩展方法)

或使用LINQ:

        return columns.Cast<DataGridViewColumn>()
            .FirstOrDefault(col => (col.State & states) != 0);
返回columns.Cast()
.FirstOrDefault(列=>(列状态和状态)!=0);

嗯,位掩码通常是这样工作的:

|
正在连接标志<代码>&从位掩码表示的标志集中过滤标志子集<代码>^通过掩码翻转标志(至少在C/C++中)

要获取第一个冻结或可见列,
GetFirstColumn
必须以不同的方式处理位掩码(例如,
GetFirstColumn
可以获取与任何标志集匹配的第一列,但情况并非如此)

        return columns.Cast<DataGridViewColumn>()
            .FirstOrDefault(col => (col.State & states) != 0);