C# 在c中帮助将foreach循环转换为while循环#

C# 在c中帮助将foreach循环转换为while循环#,c#,foreach,C#,Foreach,通过阅读您的精彩答案,我了解到,从foreach循环中删除项目并不是一个好的做法,因为它(我引述)是“锯断您所坐的分支” “我的代码”当前从dropdownlist中删除文本,但实际项目仍然保留(只是没有显示文本) 换句话说,它不是在删除,而且可能不能,因为您不能从foreach循环中删除 经过几个小时的努力,我无法找到一种方法来做这件事 //For each checked box, run the delete code for (int i = 0; i < this.organiz

通过阅读您的精彩答案,我了解到,从foreach循环中删除项目并不是一个好的做法,因为它(我引述)是“锯断您所坐的分支”

“我的代码”当前从dropdownlist中删除文本,但实际项目仍然保留(只是没有显示文本)

换句话说,它不是在删除,而且可能不能,因为您不能从foreach循环中删除

经过几个小时的努力,我无法找到一种方法来做这件事

//For each checked box, run the delete code
for (int i = 0; i < this.organizeFav.CheckedItems.Count; i++)
{
    //this is the foreach loop
    foreach (ToolStripItem mItem in favoritesToolStripMenuItem.DropDownItems)
    {
        //This rules out seperators
        if (mItem is ToolStripMenuItem)
        {
            ToolStripMenuItem menuItem = mItem as ToolStripMenuItem;

            //This matches the dropdownitems text to the CheckedItems String
            if (((ToolStripMenuItem)mItem).Text.ToString() == organizeFav.CheckedItems[i].ToString())
            {
                //And deletes the item
                menuItem.DropDownItems.Remove(mItem);
            }
        }
    }
}
//对于每个复选框,运行删除代码
for(int i=0;i
但它不是删除,因为它在foreach循环中! 我将非常感谢您的帮助,如果有人能够理解这段代码,我将感到非常惊讶:)


亲切问候

试试这样的方式:

//For each checked box, run the delete code
for (int i = 0; i < this.organizeFav.CheckedItems.Count; i++)
        {
    List<ToolStripItem> toRemove = new List<ToolStripItem>();
//this is the foreach loop
            foreach (ToolStripItem mItem in favoritesToolStripMenuItem.DropDownItems)
            {

                //This rules out seperators
                if (mItem is ToolStripMenuItem)
                {
                    ToolStripMenuItem menuItem = mItem as ToolStripMenuItem;

             //This matches the dropdownitems text to the CheckedItems String
                    if (((ToolStripMenuItem)mItem).Text.ToString() == organizeFav.CheckedItems[i].ToString())
                    {
                        toRemove.Add(mItem);
                    }
                }
            }
        foreach(var item in toRemove)
        {
        favoritesToolStripMenuItem.DropDownItems.Remove(item);
        }
        }
//对于每个复选框,运行删除代码
for(int i=0;i
尝试以下方法:

//For each checked box, run the delete code
for (int i = 0; i < this.organizeFav.CheckedItems.Count; i++)
        {
    List<ToolStripItem> toRemove = new List<ToolStripItem>();
//this is the foreach loop
            foreach (ToolStripItem mItem in favoritesToolStripMenuItem.DropDownItems)
            {

                //This rules out seperators
                if (mItem is ToolStripMenuItem)
                {
                    ToolStripMenuItem menuItem = mItem as ToolStripMenuItem;

             //This matches the dropdownitems text to the CheckedItems String
                    if (((ToolStripMenuItem)mItem).Text.ToString() == organizeFav.CheckedItems[i].ToString())
                    {
                        toRemove.Add(mItem);
                    }
                }
            }
        foreach(var item in toRemove)
        {
        favoritesToolStripMenuItem.DropDownItems.Remove(item);
        }
        }
//对于每个复选框,运行删除代码
for(int i=0;i
你不需要一个
foreach
循环-只需使用一个常规循环,但反向进行,从末尾开始,然后转到开头

//For each checked box, run the delete code
for (int i = 0; i < this.organizeFav.CheckedItems.Count; i++)
{
    //this *replaces* the foreach loop
    for(int j = favoritesToolStripMenuItem.DropDownItems.Count - 1; j >= 0; j--)
    {
        ToolStripMenuItem menuItem = favoritesToolStripMenuItem.DropDownItems[j] as ToolStripMenuItem; 

        //This rules out seperators
        if (menuItem != null)
        {
            //This matches the dropdownitems text to the CheckedItems String
            if (menuItem.Text.ToString() == organizeFav.CheckedItems[i].ToString())
            {
                favoritesToolStripMenuItem.DropDownItems.Remove(menuItem);
            }
        }
    }
 }
//对于每个复选框,运行删除代码
for(int i=0;i=0;j--)
{
ToolStripMenuItem menuItem=FavoriteStollStripMenuItem.DropDownItems[j]作为ToolStripMenuItem;
//这就排除了分隔符
if(menuItem!=null)
{
//这将dropdownitems文本与CheckedItems字符串匹配
if(menuItem.Text.ToString()==organizeFav.CheckedItems[i].ToString())
{
FavoriteSToolTripMenuItem.DropDownItems.Remove(menuItem);
}
}
}
}
这是@Kurresmack重新整理的代码,我只是直接在页面中对其进行了编码,因此请原谅我忽略的任何小语法错误或任何明显的错误(免责声明:这是一个示例!!)


您仍然可以像以前一样将
FavoriteSToolTripMenuItem.DropDownItems
视为一个集合,但您不必使用
foreach
对其进行枚举。这减少了几行代码,而且它可以工作,因为您以相反的顺序迭代它,您将不会得到索引越界异常。

您不需要
foreach
循环-只需使用常规循环,但以相反的顺序进行,从末尾开始,然后转到开头

//For each checked box, run the delete code
for (int i = 0; i < this.organizeFav.CheckedItems.Count; i++)
{
    //this *replaces* the foreach loop
    for(int j = favoritesToolStripMenuItem.DropDownItems.Count - 1; j >= 0; j--)
    {
        ToolStripMenuItem menuItem = favoritesToolStripMenuItem.DropDownItems[j] as ToolStripMenuItem; 

        //This rules out seperators
        if (menuItem != null)
        {
            //This matches the dropdownitems text to the CheckedItems String
            if (menuItem.Text.ToString() == organizeFav.CheckedItems[i].ToString())
            {
                favoritesToolStripMenuItem.DropDownItems.Remove(menuItem);
            }
        }
    }
 }
//对于每个复选框,运行删除代码
for(int i=0;i=0;j--)
{
ToolStripMenuItem menuItem=FavoriteStollStripMenuItem.DropDownItems[j]作为ToolStripMenuItem;
//这就排除了分隔符
if(menuItem!=null)
{
//这将dropdownitems文本与CheckedItems字符串匹配
if(menuItem.Text.ToString()==organizeFav.CheckedItems[i].ToString())
{
FavoriteSToolTripMenuItem.DropDownItems.Remove(menuItem);
}
}
}
}
这是@Kurresmack重新整理的代码,我只是直接在页面中对其进行了编码,因此请原谅我忽略的任何小语法错误或任何明显的错误(免责声明:这是一个示例!!)

您仍然可以像以前一样将
FavoriteSToolTripMenuItem.DropDownItems
视为一个集合,但您不必使用
foreach
对其进行枚举。这减少了几行代码,因为