c#中的运算符用于Func <in t,=“”bool =“”> </in>

时间:2014-08-07 11:11:56

标签: c# operators

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

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; 在我看来,第一人比第二人大。你能解释一下这种情况吗?

5 个答案:

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