簡體   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