Являются ли значения лямбда-объектов? - PullRequest
0 голосов
/ 15 декабря 2010

Как я понимаю, 2 лямбда-выражения должны быть равны, если они объявляют один и тот же код в одном и том же порядке с одинаковыми параметрами.

Но простой тест на 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());
    }

$

Можете ли вы сказать мне, если я делаю что-то не такили, может быть, лямбды не являются объектами значения

1 Ответ

0 голосов
/ 08 февраля 2011

Я думаю, что это потому, что лямбды - это делегаты, а Delgate - это ссылочный тип.У вас может быть два делегата одного типа, но с отдельным списком вызовов, и они не совпадают.В случае лямбды, даже если они выполняют одну и ту же работу, если вы звоните одному, вы не звоните другому.

...