我创建了一个结构
public struct MyCalender : IComparable<MyCalender>
{
public int CompareTo(PersianDate other)
{
return DateTime.Compare(this, other);
}
.
.
.
.
.
}
我在另一个UserControl中新增了两个这个对象,我想比较它们。
我使用此代码,但我收到错误。
MyCalender value = new MyCalender(2010,11,12);
MyCalender value2 = new MyCalender(2010,11,12);
if (value < value2) ==> geterror
答案 0 :(得分:5)
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;
}
}
我编辑了代码,以便在与null
进行比较时不会失败。为了简明起见,我使用了一条有效的快捷方式,除非value
Int32.MinValue
为Foo
。严格来说,您必须明确检查null
才能使the contract正确:
根据定义,任何对象都比较大于(或跟随)null,和 两个空引用比较相等。
此外,实施IComparable<T>
表示CompareTo(T value)
的参数为T
。因此,MyCalendar : IComparable<MyCalender>
应该实施方法CompareTo(MyCalendar other)
而不是PersianDate
(或实施IComparable<PersianDate>
)。
答案 1 :(得分:0)
如果仅比较日期时间对象,
会像
DateTime A = DateTime.Now, B = DateTime.Now.AddMinutes(1);
var isqual = A.Date.CompareTo(B.Date);
诀窍?
或类似的东西:
class Calender
{
public DateTime datetime { get; set;}
}
class DateComparer : Calender, IComparable<Calender>
{
public int CompareTo(Calender other)
{
return other.datetime.Date.CompareTo(this.datetime.Date);
}
}
答案 2 :(得分:0)
您应该使用已经实现的CompareTo方法而不是&gt;在您发布的行中,或者您需要重载&gt;和&lt;特定班级的操作员。例如:
public static bool operator >(MyCalendar c1, MyCalendar c2)
{
return c1.CompareTo(c2) > 0;
}
public static bool operator <(MyCalendar c1, MyCalendar c2)
{
return c1.CompareTo(c2) < 0;
}
但请记住,你必须超载它们。