Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表达式<;Func<;T、 布尔>&燃气轮机;vs Func<;T、 布尔>;方法内重载_C#_.net_Fakeiteasy - Fatal编程技术网

C# 表达式<;Func<;T、 布尔>&燃气轮机;vs Func<;T、 布尔>;方法内重载

C# 表达式<;Func<;T、 布尔>&燃气轮机;vs Func<;T、 布尔>;方法内重载,c#,.net,fakeiteasy,C#,.net,Fakeiteasy,以下3种方法是我使用的库Fakeitesy的一部分: public static T Matches<T>(this IArgumentConstraintManager<T> scope, Func<T, bool> predicate, string description); public static T Matches<T>(this IArgumentConstraintManager<T> manager, Func&l

以下3种方法是我使用的库Fakeitesy的一部分:

public static T Matches<T>(this IArgumentConstraintManager<T> scope, Func<T, bool> predicate, string description);

public static T Matches<T>(this IArgumentConstraintManager<T> manager, Func<T, bool> predicate, string descriptionFormat, params object[] args);

public static T Matches<T>(this IArgumentConstraintManager<T> scope, Expression<Func<T, bool>> predicate);
仍然会出现相同的编译器时间错误,但当我在Visual Studio中将鼠标悬停在该方法上时,工具提示显示选择的方法是
Func
one。 那么,为什么我仍然不能编译它,因为有一个关于表达式树的错误?我不想使用任何表达式树

因此,只有当我将谓词放在一个单独的方法中时,我才能使它编译

public bool Test(Class obj){
    return obj.DynamicProperty == "text";
}
把我的支票换成

A.CallTo(() => A<Class>.That.Matches(Test, "testing")).MustHaveHappened();
A.CallTo(()=>A.That.Matches(Test,“testing”)).musthaveOccessed();
这似乎奏效了

但我仍然希望编译器将我使用lamda语法编写的函数视为
Func
而不是
表达式

这是VS或编译器中的错误还是我遗漏了什么

编辑-复制的步骤/设置

创建一个空白控制台项目替换packages.config和Program.cs:


编译器抱怨的表达式是“CallTo”方法的参数:

A.CallTo(()=>mandrill.SendMessageTemplate(A.That.Matches(…));

因此,选择哪种重载的匹配项无关紧要。

通过定义方法,已知类型为
Func
如果在调用之前在变量中定义函数,如So
var test=new Func((class)=>{class.DynamicProperty==“text”;})
然后调用传递函数的匹配,但不这样做,lambda可以是
Func
Expression
。那么,为什么编译器不警告您这种不确定性,而选择带有表达式参数的方法呢?即使添加了一个应该是鉴别器的附加参数,它仍然会抱怨表达式中不支持的动态属性。如果有两个方法,一个参数为
Expression
,另一个参数为
Func
,编译器会返回歧义错误。这与流畅的断言有什么关系。这篇文章讲的是假货。@Dennisdoomens是的,对不起。编辑标记
public bool Test(Class obj){
    return obj.DynamicProperty == "text";
}
A.CallTo(() => A<Class>.That.Matches(Test, "testing")).MustHaveHappened();
A.CallTo(() => mandrill.SendMessageTemplate(A<SendMessageTemplateRequest>.That.Matches(...)));