我需要比较两个相同类型的实例。
public class Person
{
public int Age {get;set;}
public string Name { get;set;}
public static bool operator < (Person p1, Person p2)
{
return p1.Age < p2.Age;
}
public static bool operator > (Person p1, Person p2)
{
return p1.Age > p2.Age;
}
}
现在在Main我有代码:
Person o = new Person()
{
Age = 10,
Name = "Matin"
};
Func<Person, bool> test = person => person < o;
Person o2 = new Person()
{
Age = 9,
Name = "hehe"
};
Console.WriteLine(test(o2));
输出:true; 在我看来,第一人比第二人大。你能解释一下这种情况吗?
答案 0 :(得分:2)
您的代码:
Func<Person, bool> test = person => person < o;
所以你传递的人并将其与第一个人(o
)进行比较。
test(o2)
转换为
evaluate `o2 < o`
这是真的,如o2.Age < o.Age
(9 <10)。
答案 1 :(得分:2)
您应该像这样实现IComparable:
public class Person : IComparable<Person>
{
public int Age { get; set; }
public string Name { get; set; }
public int CompareTo(Person other)
{
return this.Age.CompareTo(other.Age);
}
}
并像这样使用它:
Person o = new Person()
{
Age = 10,
Name = "Matin"
};
Person o2 = new Person()
{
Age = 9,
Name = "hehe"
}
Console.WriteLine(o.CompareTo(o2));
答案 2 :(得分:1)
您的考试是:
传递给该函数的人必须少于
o
在这种情况下,“小于”表示“年龄低于”。
然后你传递o2
,所以让我们看看:
o2
,9岁o
,10岁是的,o2
小于o
。
输出正确。
答案 3 :(得分:1)
在对test(o2)
的调用中,对象o2
作为参数test
传递给person
。
这样,评估表达式o2 < o
,产生true
,因为o2
的年龄为9,o
的年龄为10。
答案 4 :(得分:1)
输出为true,因为这正是您的代码所说的。
做一个很好的比较,你需要两个变量(目前,你一直在使用&#34; o&#34;实例进行比较)
执行Func<Person, Person, bool> test = (person1, person2) => person1 < person2;
然后Console.WriteLine(test(o, o2));