Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用比较<;T>;()与三个参数重载的比较_C#_Icomparer - Fatal编程技术网

C# 使用比较<;T>;()与三个参数重载的比较

C# 使用比较<;T>;()与三个参数重载的比较,c#,icomparer,C#,Icomparer,我有一个List(),我想用一个自定义比较器函数对它进行排序 我提出: public int MyCompare(点p1,点p2) { ... } //主要是 // ... 点数排序(MyCompare); // ... 我工作,好吧 现在我想对除第一个元素以外的所有元素进行排序,所以我想: points_.Sort(1, points_.Count()-1, MyCompare); 但是有了这个超负荷,他想成为一个比较者 我怎样才能解决这个问题 请注意,Point不是一个自定义类,它来自

我有一个
List()
,我想用一个自定义比较器函数对它进行排序

我提出:

public int MyCompare(点p1,点p2)
{
...
}
//主要是
// ...
点数排序(MyCompare);
// ...
我工作,好吧

现在我想对除第一个元素以外的所有元素进行排序,所以我想:

points_.Sort(1, points_.Count()-1, MyCompare); 
但是有了这个超负荷,他想成为一个比较者

我怎样才能解决这个问题


请注意,
Point
不是一个自定义类,它来自Xna框架。我不想用
:IComparer

实现自定义类如果不想实现
IComparer
,可以使用从代理创建一个自定义类,如下所示:

points_.Sort(1, points_.Count()-1, Comparer.Create(MyCompare));
甚至

points_.Sort(1, points_.Count()-1, Comparer.Create((a, b) => {
    ... // comparison logic goes here
}));

正如@dasblinkenlight和.NET 4.5+所指出的,有一种特殊的方法可以将
比较
委托转换为
i比较

但是,如果您使用的是较低版本,则可以使用该类将
比较
委托转换为
IComparer

公共类委派比较程序:IComparer
{
私有只读比较代理;
公共委托比较程序(比较委托)
{
if(compDelegate==null)
抛出新ArgumentNullException(“compDelegate”);
this.compDelegate=compDelegate;
}
公共整数比较(TX,TY)
{
返回compDelegate(x,y);
}
}
用法示例:

points_.Sort(1, points_.Count()-1, new DelegateComparer<Point>(MyCompare)); 
points.Sort(1,points.Count()-1,新的delegatecompare(MyCompare));

“我不想用
:IComparer
”实现自定义类。为什么不呢?@Gjeltema没有很好的理由,我只是想知道,在不实现自定义类的情况下,如何解决这个问题。@misiMe根据
类的某些属性编写自己的
排序
函数在这种情况下,实现
IComparer
的类通常与被比较的类不同。它类似于框架中的
String
StringComparer
。*在.NET 4.5及更高版本中受支持。
points_.Sort(1, points_.Count()-1, new DelegateComparer<Point>(MyCompare));