我想知道是什么决定了foreach循环中的顺序?
例如,我有一个循环,从标签中删除任何'*'字符:
foreach (Label lbl in Form.Controls.OfType<Label>())
{
lbl.Text = lbl.Text.TrimEnd('*');
}
Run Code Online (Sandbox Code Playgroud)
有没有办法确定标签在逐步完成集合时的顺序是什么?
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)