【发布时间】:2016-06-27 13:24:34
【问题描述】:
我将这些TextBoxes 标记为tb_class# 和# = 1-10
到目前为止,这是我拥有的功能
private List<TextBox> GetCustomClasses()
{
List<TextBox> tb = new List<TextBox>();
foreach (Control con in gb_customClasses.Controls)
if (con.Name.Contains("tb_class"))
tb.Add(con as TextBox);
return tb.OrderByDescending(x => x.Name.Replace("tb_class", "")).ToList();
}
输出如下:
9
8
7
6
5
4
3
2
10
1
我可以为此添加一张支票,但我希望它以完美的顺序运行。对于那些想知道gb_customClasses 是groupbox 的人。
解决了!最终代码:
private List<TextBox> GetCustomClasses()
{
List<TextBox> tb = new List<TextBox>();
foreach (Control con in gb_customClasses.Controls)
if (con.Name.Contains("tb_class"))
tb.Add(con as TextBox);
return tb.OrderByDescending(x => int.Parse(x.Name.Replace("tb_class", ""))).ToList();
}
我什至没有考虑添加int.Parse
【问题讨论】:
-
替换前请出示数据。显然,您已经按字符串排序,而不是数字类型。
-
这很简单 - 您正在处理控件的名称,它们是字符串。如果您按字母顺序排序,它们是按顺序排列的!您需要将它们作为数字类型进行比较,以使其按您想要的顺序运行。
-
您可以对这种事情使用自然排序顺序 - have a look at my answer here 和 this answer here。