lambda值是对象吗?

时间:2010-12-14 22:58:56

标签: c#-3.0 lambda equals

据我所知,只要两个lambdas使用相同的参数以相同的顺序声明相同的代码,它们就应该相等。

但是对GetHashcode的简单测试失败了:

$

    private class LambdaTest 
    {
        private bool x;

        public Expression<Func<object, bool>> Predicate
        {
            get { return o => x; }
        }

        public LambdaTest(bool x)
        {
            this.x= x;
        }

        public override int GetHashCode()
        {
            return Predicate.GetHashCode();
        }

    }

$

测试 $

    [Test]
    public void hashonlambdas()
    {
        NullSpecification n1 = new NullSpecification(true);
        NullSpecification n2 = new NullSpecification(true);

        Assert.AreEqual(n1.GetHashCode(), n2.GetHashCode());
    }

$

你能告诉我,我做错了什么,或者lambda不是价值对象

1 个答案:

答案 0 :(得分:0)

我认为这是因为lambdas是委托人而Delgate是参考类型。 您可以拥有两个相同类型但具有不同调用列表的委托,它们不同。在lambda的情况下,即使他们做同样的工作,如果你打电话给另一个你没有打电话给另一个。