【发布时间】:2015-03-10 05:10:41
【问题描述】:
截图说明了这一点。 如屏幕截图所示,我有重载。当使用字符串作为第二个参数时,编译器应该确定第一个参数只能是 Func 而不是表达式。 但是编译器会抛出一个错误,说“不能将带有语句体的 lamda 表达式转换为表达式树”。
为什么编译器不能找出正确的重载?
显式转换没有帮助。有效的是当我创建一个 Func 类型的局部变量然后使用它时。
使用的框架是 FakeItEasy 1.24.0
编辑:
这是显示行为的代码:
public static void Main(string[] args)
{
//compiler error
A.CallTo(() => Main(A<string[]>.That.Matches(strings =>
{
return true;
}, "description")));
//compiles
Func<string[], bool> predicate = strings =>
{
return true;
};
A.CallTo(() => Main(A<string[]>.That.Matches(predicate, "description")));
Console.ReadLine();
}
【问题讨论】:
-
你能把代码贴出来而不是截图吗?
-
您不要在仅表达式的 lambda 正文中使用
return...string => true就足够了。 -
@leppie:正确,但这不是重点。正如您在屏幕截图中看到的那样,编译器应该使用带有 Func
的重载,因此方法体应该没问题。编译器会给出错误。问题是为什么。 -
@leppie:第二个参数是一个字符串,因此表达式的重载应该不在图片中,因为这个重载只有一个参数。
-
@leppie:好点,但没有默认值。
标签: c# lambda compiler-errors expression fakeiteasy