如何比较C#中两个对象的值

ar.*_*gin 2 c#

我创建了一个结构

 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)

Mat*_*eid 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑了代码,以便在比较时不会失败null.为了保持简洁,我使用了一个有效的快捷方式,除非valueInt32.MinValue正确的Foo.严格来说,您必须null明确检查以确保合同正确:

根据定义,任何对象都比较大于(或跟随)null,并且两个空引用相互比较相等.

此外,实现IComparable<T>意味着CompareTo(T value)参数T.因此MyCalendar : IComparable<MyCalender>应该实现一种方法CompareTo(MyCalendar other)而不是PersianDate(或实现IComparable<PersianDate>).