[英]Bit operations on Enum
我遇到以下問題:
我想這會做到:
DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
實施是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.