我创建了一个结构
public struct MyCalender : IComparable<MyCalender>
{
public int CompareTo(PersianDate other)
{
return DateTime.Compare(this, other);
}
.
.
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
我在另一个UserControl中新增了两个这个对象,我想要比较它们.
我使用此代码,但我得到错误.
MyCalender value = new MyCalender(2010,11,12);
MyCalender value2 = new MyCalender(2010,11,12);
if (value < value2) ==> geterror
Run Code Online (Sandbox Code Playgroud)
IComparable暴露CompareTo.<并且>必须单独重载:
class Foo : IComparable<Foo>
{
private static readonly Foo Min = new Foo(Int32.MinValue);
private readonly int value;
public Foo(int value)
{
this.value = value;
}
public int CompareTo(Foo other)
{
return this.value.CompareTo((other ?? Min).value);
}
public static bool operator <(Foo a, Foo b)
{
return (a ?? Min).CompareTo(b) < 0;
}
public static bool operator >(Foo a, Foo b)
{
return (a ?? Min).CompareTo(b) > 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我编辑了代码,以便在比较时不会失败null.为了保持简洁,我使用了一个有效的快捷方式,除非value是Int32.MinValue正确的Foo.严格来说,您必须null明确检查以确保合同正确:
根据定义,任何对象都比较大于(或跟随)null,并且两个空引用相互比较相等.
此外,实现IComparable<T>意味着CompareTo(T value)参数T.因此MyCalendar : IComparable<MyCalender>应该实现一种方法CompareTo(MyCalendar other)而不是PersianDate(或实现IComparable<PersianDate>).