Enum 上的位操作

发布于 2024-07-15 06:27:05 字数 305 浏览 8 评论 0原文

我遇到了以下问题:

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

我认为这可以做到:

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

I'm having some problems with the following:

  • I want to get the first visible AND frozen column of a column collection.

I think this will do it:

DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
     DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
  • Is it also possible to make a bitmask to get the first frozen OR visible column?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

世界如花海般美丽 2024-07-22 06:27:06

AFAIK 的实现是“所有这些” - 它使用:

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

这是“所有”。 如果您想编写“任意”,也许可以添加一个辅助方法:
(在 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);

The implementation is, AFAIK, "all of these" - it uses:

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

Which is "all of". If you wanted to write an "any of", perhaps add a helper method:
(add the "this" before DataGridViewColumnCollection to make it a C# 3.0 extension method in)

    public static DataGridViewColumn GetFirstColumnWithAny(
        DataGridViewColumnCollection columns, // optional "this"
        DataGridViewElementStates states)
    {
        foreach (DataGridViewColumn column in columns)
        {
            if ((column.State & states) != 0) return column;
        }
        return null;
    }

Or with LINQ:

        return columns.Cast<DataGridViewColumn>()
            .FirstOrDefault(col => (col.State & states) != 0);
合久必婚 2024-07-22 06:27:06

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

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

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

Well, bitmasks usually work like this:

| is joining flags up. & is filtering subset of flags from a flag set represented by a bitmask. ^ is flipping flags by a mask (at least in C/C++).

To get the first frozen OR visible column GetFirstColumn must handle bitmasks different way (e.g. GetFirstColumn could get the first column that matches any of the flags set, but this is not the case).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文