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

时间:2012-10-16 13:57:26

标签: c#

我创建了一个结构

 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

3 个答案:

答案 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.MinValueFoo。严格来说,您必须明确检查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;
        }

但请记住,你必须超载它们。