存在目的是IComparer.Comp的显式实现在Comparer<T>
类的实现中。
如果我实现了public abstract int Compare (T x, T y)
的原因以及调用int IComparer.Compare (object ObjX, object ObjY)
的原因,请考虑到必须将ObjX和ObjY强制转换为T类型(在其他情况下为ArgumentException)。
第12行和第13行将产生相同的动作;
class Program
{
static void Main(string[] args)
{
IComparer iRefCommon = (IComparer)new BoxLengthFirst();
object obj1 = new Box(2, 6, 8);
object obj2 = new Box(10, 12, 14);
int resulCompare = iRefCommon.Compare((Box)obj1, (Box)obj2); //line12
resulCompare = (new BoxLengthFirst()).Compare(new Box(2, 6, 8),
new Box(10, 12, 14)); //line13
}
}
public class BoxLengthFirst : Comparer<Box>
{
public override int Compare(Box x, Box y)
{
if (x.Length.CompareTo(y.Length) != 0)
{
return x.Length.CompareTo(y.Length);
}
.....
else
{
return 0;
}
}
}
public class Box : IComparable, IComparable<Box>
{
public Box(int h, int l, int w)
{
this.Height = h;
this.Length = l;
this.Width = w;
}
public int Height { get; private set; }
public int Length { get; private set; }
public int Width { get; private set; }
public int CompareTo(object obj)
{
....
}
public int CompareTo(Box other)
{
....
}
}
答案 0 :(得分:-1)
尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication108
{
class Program
{
static void Main(string[] args)
{
Box a = new Box(1, 1, 1);
Box b = new Box(2, 2, 2);
int c = a.CompareTo(b);
}
}
public class Box : IComparable
{
public Box() { }
public Box(int h, int l, int w)
{
this.Height = h;
this.Length = l;
this.Width = w;
}
public int Height { get; private set; }
public int Length { get; private set; }
public int Width { get; private set; }
public int CompareTo(object obj)
{
return CompareTo((Box)obj);
}
public int CompareTo(object obj1, object obj2)
{
return ((Box)obj1).CompareTo((Box)obj2);
}
public int CompareTo(Box other)
{
int results = this.Height.CompareTo(other.Height);
if (results != 0)
{
results = this.Length.CompareTo(other.Length);
if (results != 0)
{
results = this.Width.CompareTo(other.Width);
}
}
return results;
}
}
}