繁体   English   中英

Enum上的位操作

[英]Bit operations on Enum

我遇到以下问题:

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

我想这会做到:

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

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

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

哪个是“全部”。 如果你想编写一个“any of”,也许可以添加一个帮助方法:(在DataGridViewColumnCollection之前添加“this”以使其成为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);

嗯,bitmasks通常像这样工作:

| 正在加入旗帜。 &正在过滤由位掩码表示的标志集中的标志子集。 ^是通过掩码翻转标志(至少在C / C ++中)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM