C# 4.0 与排序一起使用的泛型(比较<;T>;)
我想知道是否有可能重用我的重载排序(比较)方法来按tabIndex对标签和文本框进行排序。我已经试过了,但没能成功。任何帮助都将不胜感激C# 4.0 与排序一起使用的泛型(比较<;T>;),c#-4.0,C# 4.0,我想知道是否有可能重用我的重载排序(比较)方法来按tabIndex对标签和文本框进行排序。我已经试过了,但没能成功。任何帮助都将不胜感激 foreach(Control control in gbUserInputs.Controls) { if (control is Label) { inputLabels.Add((Label)control); }
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);
排序方法的重载
private static int sortMyInputs<T>(T entry1, T entry2)
{
return entry1.TabIndex.CompareTo(entry2.TabIndex);
}
private static int sortMyInputs(T entry1,T entry2)
{
返回entry1.TabIndex.CompareTo(entry2.TabIndex);
}
您不应该创建通用方法:
private static int CompareLabels(Label entry1, Label entry2)
{
return entry1.TabIndex.CompareTo(entry2.TabIndex);
}
泛型委托的要点是允许它持有不同具体类型的方法;不允许它保存本身是泛型的方法
如果您想重用您的方法,可以将其修改为采用控件
(这两个文本框
和标签
继承);由于代理协方差,您仍然可以将其传递到List.Sort
如果您使用的是.Net<4,它没有委托协方差,您可以通过向方法添加约束来实现,这样它就知道
t
可以是什么:
private static int CompareLabels<T>(T entry1, T entry2) where T : Control
{
return entry1.TabIndex.CompareTo(entry2.TabIndex);
}
private static int comparelabel(T entry1,T entry2),其中T:Control
{
返回entry1.TabIndex.CompareTo(entry2.TabIndex);
}
您也可以简单地用一行LINQ替换所有代码:
inputLabels = gbUserInputs.Controls.OfType<Label>()
.OrderBy(c => c.TabIndex)
.ToList();
inputLabels=gbUserInputs.Controls.OfType()
.OrderBy(c=>c.TabIndex)
.ToList();
您不应该创建通用方法:
private static int CompareLabels(Label entry1, Label entry2)
{
return entry1.TabIndex.CompareTo(entry2.TabIndex);
}
泛型委托的要点是允许它持有不同具体类型的方法;不允许它保存本身是泛型的方法
如果您想重用您的方法,可以将其修改为采用控件
(这两个文本框
和标签
继承);由于代理协方差,您仍然可以将其传递到List.Sort
如果您使用的是.Net<4,它没有委托协方差,您可以通过向方法添加约束来实现,这样它就知道
t
可以是什么:
private static int CompareLabels<T>(T entry1, T entry2) where T : Control
{
return entry1.TabIndex.CompareTo(entry2.TabIndex);
}
private static int comparelabel(T entry1,T entry2),其中T:Control
{
返回entry1.TabIndex.CompareTo(entry2.TabIndex);
}
您也可以简单地用一行LINQ替换所有代码:
inputLabels = gbUserInputs.Controls.OfType<Label>()
.OrderBy(c => c.TabIndex)
.ToList();
inputLabels=gbUserInputs.Controls.OfType()
.OrderBy(c=>c.TabIndex)
.ToList();
很抱歉,这可能是一个愚蠢的问题,但泛型委托从何而来?我还没有谈到LINQ,但是谢谢你把它包括进来。是的,我正在使用.NET4.0。非常感谢你的帮助far@HansRudel:Sort()
进行一次比较
,这是一次普通委托。我强烈建议您学习LINQ;它使这类代码大大缩短,可读性更高。(通常也更快)是的,好的。。。哦。这在我要做的事情清单上,但仍然有一些基本的事情我没有100%的速度。非常感谢您抽出时间回答我的问题,我真的很感激!抱歉,这可能是一个愚蠢的问题,但是一般委托是从哪里来的呢?我还没有谈到LINQ,但是谢谢你把它包括进来。是的,我正在使用.NET4.0。非常感谢你的帮助far@HansRudel:Sort()
进行一次比较
,这是一次普通委托。我强烈建议您学习LINQ;它使这类代码大大缩短,可读性更高。(通常也更快)是的,好的。。。哦。这在我要做的事情清单上,但仍然有一些基本的事情我没有100%的速度。非常感谢您抽出时间回答我的问题,我真的很感激!