2

構造体を作りました

 public struct MyCalender : IComparable<MyCalender>
{
 public int CompareTo(PersianDate other)
    {
        return DateTime.Compare(this, other);
    }
 .
 .
 .
 .
 .
}

私は別の UserControl でこれの 2 つの新しいオブジェクトを作成し、それらを比較したいと思います。

このコードを使用しますが、エラーが発生します。

 MyCalender value = new MyCalender(2010,11,12);
 MyCalender value2 = new MyCalender(2010,11,12);
        if (value < value2) ==> geterror
4

3 に答える 3

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.MinValueFoonull

定義により、任意のオブジェクトは null より大きい (または null に続く) と比較され、2 つの null 参照は互いに等しいと比較されます。

また、のパラメータを取るIComparable<T>手段を実装します。したがって、 (または実装する)のではなく、メソッドを実装する必要があります。CompareTo(T value)TMyCalendar : IComparable<MyCalender>CompareTo(MyCalendar other)PersianDateIComparable<PersianDate>

于 2012-10-16T14:00:50.743 に答える
0

投稿した行で>の代わりに、すでに実装したCompareToメソッドを使用するか、特定のクラスの>および<演算子をオーバーロードする必要があります。例えば:

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;
        }

ただし、両方をオーバーロードする必要があることに注意してください。

于 2012-10-16T14:06:29.180 に答える
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);
            }
        }
于 2012-10-16T14:02:22.567 に答える