0
据我所知2 lambda应该是相等的,只要他们用相同的参数以相同的顺序声明相同的代码即可。是否为lambda值对象?
但在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表达式不是值对象
LambdaTest如何与NullSpecification相关? – 2010-12-14 23:02:06
我以为lambda表达式是一个代表。无论如何,您应该测试的是平等还是相同的对象。 – Swanny 2010-12-14 23:08:26
示例代码只是我真实代码的摘录(我想我删除了一些使其不太清晰的部分)。但重点在于Predicate属性在两个对象中基本相同,所以如果它们是Equals,则Predicate.GetHashCode()必须返回相同的值。 – jorge 2010-12-14 23:56:10