[英]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.