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

C# 如何在C语言中比较两个对象的值#,c#,C#,我创建了一个结构 public struct MyCalender : IComparable<MyCalender> { public int CompareTo(PersianDate other) { return DateTime.Compare(this, other); } . . . . . } public结构MyCalendar:IComparable { 公共国际比较(其他) { 返回日期时间。比较(此,其他); }

我创建了一个结构

 public struct MyCalender : IComparable<MyCalender>
{
 public int CompareTo(PersianDate other)
    {
        return DateTime.Compare(this, other);
    }
 .
 .
 .
 .
 .
}
public结构MyCalendar:IComparable
{
公共国际比较(其他)
{
返回日期时间。比较(此,其他);
}
.
.
.
.
.
}
我在另一个UserControl中创建了这两个新对象,并希望比较它们

我使用这个代码,但我得到了错误

 MyCalender value = new MyCalender(2010,11,12);
 MyCalender value2 = new MyCalender(2010,11,12);
        if (value < value2) ==> geterror
MyCalendar值=新的MyCalendar(2010,11,12);
MyCalendar值2=新的MyCalendar(2010,11,12);
如果(值<值2)==>geterror

i可比较
公开<代码>必须分别重载:

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;
    }
}
class Foo:i可比较
{
私有静态只读Foo Min=新Foo(Int32.MinValue);
私有只读int值;
公共Foo(int值)
{
这个值=值;
}
公共内部比较(Foo其他)
{
返回此.value.CompareTo((其他??最小).value);
}
公共静态布尔运算符(Foo a、Foo b)
{
返回时间(a??Min)。与(b)相比>0;
}
}
我编辑了代码,以便在与
null
进行比较时不会失败。为了保持简洁,我使用了一个快捷方式,除非
value
Int32.MinValue
,否则该快捷方式适用于正确的
Foo
。严格地说,您必须明确检查
null
才能正确:

根据定义,任何对象的比较都大于(或遵循)null,并且 两个空引用的比较结果相等


此外,实现
IComparable
意味着
CompareTo(T值)
采用参数
T
。因此
MyCalendar:IComparable
应该实现一个方法
CompareTo(MyCalendar-other)
,而不是
persindate
(或者实现
IComparable
)。

如果只比较一个datetime对象

你想要什么

  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);
            }
        }
class压延机
{
公共日期时间日期时间{get;set;}
}
类日期比较器:日历,IComparable
{
公共内部比较(日历其他)
{
返回other.datetime.Date.CompareTo(this.datetime.Date);
}
}

您应该使用已经实现的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;
        }
公共静态布尔运算符>(MyCalendar c1,MyCalendar c2)
{
返回c1。比较(c2)>0;
}

公共静态布尔运算符重载小于运算符:您创建了一个
结构
,而不是
。这两者之间有很大的区别,几乎可以肯定的是,您不应该创建
struct
。非常感谢,我使用了这段代码,但是当我使用public Foo(int-value)时,我得到了一个错误“必须在控件返回给调用方之前完全赋值”您是否初始化了所有
只读
字段?我在VS2012中编写的
Foo
类进行编译,因为
value
已初始化。是,它是只读的。我使用vs2012 RC。我有3个初始化MyCalendar结构的实例。等等,你们现在做了什么
Foo
只是一个示例类来说明原理。在
MyCalendar
中,操作员需要获取
MyCalendar
实例。你能给我们看看你现在的代码吗?我又增加了一段关于
MyCalendar
PersianDate
的内容。首先,我不确定
CompareTo
是否正确实现。因此,请显示相关代码的完整位:)