据我所知,只要两个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不是价值对象
答案 0 :(得分:0)
我认为这是因为lambdas是委托人而Delgate是参考类型。 您可以拥有两个相同类型但具有不同调用列表的委托,它们不同。在lambda的情况下,即使他们做同样的工作,如果你打电话给另一个你没有打电话给另一个。