忽略foreach循环中特定类型的项目

 sijiamian_767 发布于 2023-02-09 10:58

我试图取消选中菜单中所有可检查的ToolStripMenuItem项目

foreach (ToolStripMenuItem item in filtersMenu.DropDownItems)
{
   item.Checked = false;
}

ToolStripMenuItem都可以检查,但问题是编译器给出了InvalidCastException,循环也试图对ToolStripSeparator项目进行操作,如何解决这个问题,任何帮助都将不胜感激,谢谢.

2 个回答
  • 你可以使用RononDex的答案,这是非常好的.你也可以这样说:

    foreach(ToolStripMenuItem item in filtersMenu.DropDownItems.OfType<ToolStripMenuItem>())
    {
        item.Checked = false;
    }
    

    编辑:

    如果我没有弄错的话,RononDex的代码应该可以修改为这个(使用ToolStripItem而不是 ToolStripMenuItem:

    foreach (ToolStripItem item in filtersMenu.DropDownItems)
    {
        if (item is ToolStripSeparator)
            continue;
    
        item.Checked = false;
    }
    

    而且有点短:

    foreach (ToolStripItem item in filtersMenu.DropDownItems)
    {
        if (item is ToolStripMenuItem)
            item.Checked = false;
    }
    

    这将起作用,因为DropDownItems-property属于该类型ToolStripItemCollection.此集合包含该类型的项目ToolStripItem.此外,如果你看一下两者的继承层次ToolStripMenuItemToolStripSeparator,你会看到他们都继承ToolStripItem.

    更多阅读:

    ToolStripDropDownItem.DropDownItems属性

    2023-02-09 11:02 回答
  • 只需添加一个if语句来检查项目的类型:

    foreach (ToolStripItem item in filtersMenu.DropDownItems)
    {
        // Move to next item if ToolStripSeparator
        if (item is ToolStripSeparator)
            continue;
    
        item.Checked = false;
    }
    

    2023-02-09 11:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有