订单在“;foreach”;决心
本文关键字:foreach 决心 | 更新日期: 2023-09-27 18:20:22
我想知道是什么决定了foreach循环中的顺序?
例如,我有一个循环,可以从标签中删除任何"*"字符:
foreach (Label lbl in Form.Controls.OfType<Label>())
{
lbl.Text = lbl.Text.TrimEnd('*');
}
有没有一种方法可以确定标签在收集过程中的顺序?
foreach
使用给定给它的IEnumerable
的任何顺序,因此它取决于Form.Controls
的顺序。该顺序是.designer.cs
文件中自动生成的代码决定在中生成的任何顺序。
如果要强制执行订单,则需要先对IEnumerable
进行排序,然后再将其交给foreach
。例如,下面的代码将按控件名称对它们进行排序。
foreach (Label lbl in Form.Controls.OfType<Label>().OrderBy(x=>x.Name)
{
lbl.Text = lbl.Text.TrimEnd('*');
}
如果要指定顺序,只需要对列表进行排序。例如,此代码很详细,但演示了OrderBy
:的用法
var labels = Form.Controls.OfType<Label>();
var orderLabels = labels.OrderBy(l => l.Text);
foreach (Label lbl in orderedLabels)
{
lbl.Text = lbl.Text.TrimEnd('*');
}
这将取决于Controls
集合的顺序。它将首先查找Label
类型的所有控件,比如说在数组中。
因此,它将从0开始,从1到n,foreach
将从索引0开始。
如果你想指定它的顺序,你可以使用Linq扩展方法,即OrderBy
MSDN for OrderBy:此处