我想知道是否有可能重用我的sort (比较)方法的重载来按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>);sort方法的重载。
private static int sortMyInputs<T>(T entry1, T entry2)
{
return entry1.TabIndex.CompareTo(entry2.TabIndex);
}发布于 2012-05-31 19:52:23
你不应该创建一个泛型方法:
private static int CompareLabels(Label entry1, Label entry2)
{
return entry1.TabIndex.CompareTo(entry2.TabIndex);
}泛型委托的要点是允许它持有不同具体类型的方法;而不是允许它持有本身是泛型的方法。
如果您想重用您的方法,您可以修改它以获取Control ( TextBox和Label都继承了它);由于委托协方差,您仍然可以将它传递给List<Label>.Sort。
如果你使用的是.Net < 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();https://stackoverflow.com/questions/10833030
复制相似问题