我想知道是否可以重复使用Sort(Comparison)方法的重载来通过tabIndex对标签和文本框进行排序。我已经尝试了,我无法让它工作。任何帮助将不胜感激。
foreach(Control control in gbUserInputs.Controls)
{
if (control is Label)
{
inputLabels.Add((Label)control);
}
if (control is TextBox)
{
inputTxtboxes.Add((TextBox)control);
}
}
排序方法调用(这不起作用)。
inputLabels.Sort(sortMyInputs<Label>);
重载方法。
private static int sortMyInputs<T>(T entry1, T entry2)
{
return entry1.TabIndex.CompareTo(entry2.TabIndex);
}
答案 0 :(得分:1)
你不应该制作通用方法:
private static int CompareLabels(Label entry1, Label entry2)
{
return entry1.TabIndex.CompareTo(entry2.TabIndex);
}
泛型委托的要点是允许它拥有不同具体类型的方法;不允许它持有本身通用的方法。
如果您想重复使用自己的方法,可以对其进行修改,以便Control
(TextBox
和Label
都继承);由于代表协方差,您仍然可以将其传递给List<Label>.Sort
。
如果你正在使用.Net&lt; 4,没有委托协方差,您可以通过向方法添加约束来实现,以便它知道T
可以是什么:
private static int CompareLabels<T>(T entry1, T entry2) where T : Control
{
return entry1.TabIndex.CompareTo(entry2.TabIndex);
}
您也可以使用一行LINQ替换所有代码:
inputLabels = gbUserInputs.Controls.OfType<Label>()
.OrderBy(c => c.TabIndex)
.ToList();