operators in c# for Func<in T, bool>

本文关键字:in bool gt lt for Func operators | 更新日期: 2023-09-27 18:17:07

我需要比较两个相同类型的实例

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

输出:真的,在我看来,第一个人比第二个人大。你能给我解释一下这个情况吗?

operators in c# for Func<in T, bool>

代码:

Func<Person, bool> test = person => person < o;

所以你正在传递这个人,并将其与第一个人(o)进行比较。

test(o2)

转换成

evaluate `o2 < o`

为真,如o2.Age < o.Age (9 <10)。

你应该这样实现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));

你的测试是:

传递给函数的人必须小于o

在这种情况下,"小于"表示"年龄小于"。

然后你通过o2,所以让我们看看:

  • o2, 9岁
  • o, 10岁

所以,是的,o2小于o

输出正确

在对test(o2)的调用中,对象o2作为参数person传递给test。这样,表达式o2 < o被求值,得到true,因为o2的Age是9,o的Age是10。

输出为真,因为这正是你的代码所说的。

要进行良好的比较,您需要两个变量(目前,您一直在使用"0"实例进行比较)

Do Func<Person, Person, bool> test = (person1, person2) => person1 < person2;

然后是Console.WriteLine(test(o, o2));