如何确定"foreach"中的顺序?

Ben*_*Ben 0 c# foreach

我想知道是什么决定了foreach循环中的顺序?

例如,我有一个循环,从标签中删除任何'*'字符:

foreach (Label lbl in Form.Controls.OfType<Label>())
{
    lbl.Text = lbl.Text.TrimEnd('*');
}
Run Code Online (Sandbox Code Playgroud)

有没有办法确定标签在逐步完成集合时的顺序是什么?

Sco*_*ain 5

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('*');
}
Run Code Online (Sandbox Code Playgroud)