C# 在c中帮助将foreach循环转换为while循环#
通过阅读您的精彩答案,我了解到,从foreach循环中删除项目并不是一个好的做法,因为它(我引述)是“锯断您所坐的分支” “我的代码”当前从dropdownlist中删除文本,但实际项目仍然保留(只是没有显示文本) 换句话说,它不是在删除,而且可能不能,因为您不能从foreach循环中删除 经过几个小时的努力,我无法找到一种方法来做这件事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
//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
对其进行枚举。这减少了几行代码,因为