在 Array.Sort 参数中定义 ICompare(比较器),如 (Java)
Define ICompare (Comparator) in Array.Sort Parameter as in (Java)
如何将此 java 样式代码转换为 C#?这是我已经尝试过的方法:
我将方法名称从 comparable(java) 更改为 icompare(c#)。
Array.Sort(valobject, new IComparer(){
public int Compare(Object obj1, Object obj2) {
String label1 = ((valobject) obj1).getLabel();
String label2 = ((valobject) obj2).getLabel();
if (label1 == null) {
if (label2 == null) {
return 0;
} else {
return -1;
}
} else {
if (label2 == null) {
return 1;
} else {
return (new CaseInsensitiveComparer()).Compare(label1, label2 ) ;
}
}
}
});
只需定义 IComparer
的实现并将其实例传递给 Sort
方法。 C#中没有匿名类.
编辑:
实际上有一个 Array.Sort
的重载需要 Comparison
委托,因此可以直接使用 lambda 函数:
Array.Sort(valobject, (obj1, obj2) =>
{
String label1 = ((valobject) obj1).getLabel();
String label2 = ((valobject) obj2).getLabel();
// ...
// ...all the rest of the comparison logic
});
如何将此 java 样式代码转换为 C#?这是我已经尝试过的方法:
我将方法名称从 comparable(java) 更改为 icompare(c#)。
Array.Sort(valobject, new IComparer(){
public int Compare(Object obj1, Object obj2) {
String label1 = ((valobject) obj1).getLabel();
String label2 = ((valobject) obj2).getLabel();
if (label1 == null) {
if (label2 == null) {
return 0;
} else {
return -1;
}
} else {
if (label2 == null) {
return 1;
} else {
return (new CaseInsensitiveComparer()).Compare(label1, label2 ) ;
}
}
}
});
只需定义 IComparer
的实现并将其实例传递给 Sort
方法。 C#中没有匿名类.
编辑:
实际上有一个 Array.Sort
的重载需要 Comparison
委托,因此可以直接使用 lambda 函数:
Array.Sort(valobject, (obj1, obj2) =>
{
String label1 = ((valobject) obj1).getLabel();
String label2 = ((valobject) obj2).getLabel();
// ...
// ...all the rest of the comparison logic
});