我不确定如何准确地表达我想要实现的目标,因此 - 编写了一些代码:
public class Foo{
public Bar Bar{get;set;}
}
public class Bar{
public string Fizz{get;set;}
}
public class Facts{
[Fact]
public void fact(){
Assert.Equal(expectedExp(),barToFoo(barExp()));
}
private Expression<Func<Foo,bool>> expectedExp(){
return f=>f.Bar.Fizz=="fizz";
}
private Expression<Func<Bar,bool>> barExp(){
return b=>b.Fizz=="fizz";
}
private Expression<Func<Foo,bool>> barToFoo
(Expression<Func<Bar,bool>> barExp){
return Voodoo(barExp); //<-------------------------------------------???
}
}
这真的可能吗?
Assert.Equal(expectedExp(),BarToFoo(barExpr));
==期望值: f => (f.Bar.Fizz=="fizz"); 实际值: foo=>Invoke(b=>(b.Fizz=="fizz"), Invoke(foo=>foo.Bar, foo))
。这并不是我要找的(我不再需要它,但尝试解决这个问题仍然很有趣)。 - Arnis LapsaEquals()
不进行深度比较。因此,即使您复制了方法ExpectedExp()
并创建了ExpectedExp2()
,您也不会得到绿色的Assert.Equal(ExpectedExp(),ExpectedExp2());
! - ulrichb