方法重载中的 Expression<Func<T,bool>> 与 Func<T,bool>

姆布德尼克

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

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 2017 时遇到以下问题。我想提供一个谓词Func<T,bool>not Expression<Func<T, bool>>原因是我的函数比较了一个类的动态属性,如下所示:

 A.CallTo(() => A<Class>.That.Matches(obj => obj.DynamicProperty == "text")).MustHaveHappened();

DynamicPropertydynamic关键字标记,我收到编译时错误说

表达式树可能不包含动态操作

https://i.imgur.com/ujetxPh.png好的,我明白了。它在表达式中不受支持。我想选择一个使用Func<T, bool>.

如果有两种方法在谓词(表达式和函数)的类型上有所不同,我该如何选择一个?

正如你在上面的方法定义中看到的,Func<T,bool>重载有一个额外的string description参数。我希望这足以让编译器选择适当的重载。

所以我改变了我的电话是这样的:

A.CallTo(() => A<Class>.That.Matches(obj => obj.DynamicProperty == "text", "testing")).MustHaveHappened();

仍然得到相同的编译器时间错误,但是当我现在将鼠标悬停在 Visual Studio 中的方法上时,工具提示说选择的方法是那个Func<T,bool>那么为什么我仍然无法编译它并显示有关表达式树的错误信息?我不想使用任何表达式树!

因此,只有将谓词放在单独的方法中,我才设法使其编译

public bool Test(Class obj){
    return obj.DynamicProperty == "text";
}

并将我的支票更改为

A.CallTo(() => A<Class>.That.Matches(Test, "testing")).MustHaveHappened();

这似乎可以解决问题。

但我仍然希望编译器将我使用 lamda 语法编写的函数视为Func<T,bool>not Expression<Func<T,bool>>

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

编辑 - 重现它的步骤/设置

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

https://gist.github.com/michaelbudnik/33f3dd39df038ba1d02f01dc9659002b

GC。

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

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

因此,选择哪种匹配重载并不重要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正文Expression <Func <T,bool >>的复杂编辑

来自分类Dev

是否可以将Expression <Func <T,bool >>转换为Expression <Func <MyType,bool >>?

来自分类Dev

将Expression <Func <T,bool >>转换为Expression <Func <T1,bool >>,以便T是T1的成员

来自分类Dev

如何将Expression <Func <T,object >>转换为Expression <Func <T,bool >>?

来自分类Dev

将表达式转换为Expression <Func <T,bool >>

来自分类Dev

在IGrouping中使用Where(Expression <Func <T,bool >>)

来自分类Dev

从Expression <Func <T,bool >>实体框架返回所有实体

来自分类Dev

实体框架过滤器“ Expression <Func <T,bool >>”

来自分类Dev

如何将 BinaryExpression 转换为 Expression<Func<T, bool>>?

来自分类Dev

Func <T,bool>的逻辑逆

来自分类Dev

有什么方法可以分解Expression <Func <T,Bool >>并获得相等比较的右侧?

来自分类Dev

使用NSubstitute在单元测试中验证Expression <Func <T,bool >>参数

来自分类Dev

如何修改Expression <Func <???,bool >>的类型参数?

来自分类Dev

从Func <T,bool>获取布尔值

来自分类Dev

从Func <T,bool>获取布尔值

来自分类Dev

如何将IQueryable <T>转换为Expression <Func <T,bool >>?

来自分类Dev

具有约束条件的Moq表达式... It.Is <Expression <Func <T,bool >>>

来自分类Dev

将Expression <Func <T,bool >>传递到存储库的单元测试查询

来自分类Dev

Delete(Expression <Func <T,bool >>条件)MongoDB查询C#驱动程序

来自分类Dev

为什么这个带有Expression <Func <T,bool>的模拟不匹配?

来自分类Dev

如何在C#中将LambdaExpression转换为Expression <Func <T,bool >>

来自分类Dev

为什么这个带有Expression <Func <T,bool>的模拟不匹配?

来自分类Dev

动态构造Expression <Func <T,bool >>对于GreaterThen不起作用

来自分类Dev

将Func <T,TProperty>转换为Expression <Func <T,Property >>

来自分类Dev

将谓词<T>转换为Func <T,bool>

来自分类Dev

自动停止从绑定Func <T,T,bool>的Ninject

来自分类Dev

为什么`Predicate <T>`与`Func <T,bool>`不匹配?

来自分类Dev

将Expression <Func <TModel,TValue >>转换为Expression <Func <TModel,bool >>

来自分类Dev

将Expression <Func <TEntity,IEnumerable <TProperty >>> valueSelector,TValue []值转换为Expression <Func <TElement,bool >>

Related 相关文章

  1. 1

    正文Expression <Func <T,bool >>的复杂编辑

  2. 2

    是否可以将Expression <Func <T,bool >>转换为Expression <Func <MyType,bool >>?

  3. 3

    将Expression <Func <T,bool >>转换为Expression <Func <T1,bool >>,以便T是T1的成员

  4. 4

    如何将Expression <Func <T,object >>转换为Expression <Func <T,bool >>?

  5. 5

    将表达式转换为Expression <Func <T,bool >>

  6. 6

    在IGrouping中使用Where(Expression <Func <T,bool >>)

  7. 7

    从Expression <Func <T,bool >>实体框架返回所有实体

  8. 8

    实体框架过滤器“ Expression <Func <T,bool >>”

  9. 9

    如何将 BinaryExpression 转换为 Expression<Func<T, bool>>?

  10. 10

    Func <T,bool>的逻辑逆

  11. 11

    有什么方法可以分解Expression <Func <T,Bool >>并获得相等比较的右侧?

  12. 12

    使用NSubstitute在单元测试中验证Expression <Func <T,bool >>参数

  13. 13

    如何修改Expression <Func <???,bool >>的类型参数?

  14. 14

    从Func <T,bool>获取布尔值

  15. 15

    从Func <T,bool>获取布尔值

  16. 16

    如何将IQueryable <T>转换为Expression <Func <T,bool >>?

  17. 17

    具有约束条件的Moq表达式... It.Is <Expression <Func <T,bool >>>

  18. 18

    将Expression <Func <T,bool >>传递到存储库的单元测试查询

  19. 19

    Delete(Expression <Func <T,bool >>条件)MongoDB查询C#驱动程序

  20. 20

    为什么这个带有Expression <Func <T,bool>的模拟不匹配?

  21. 21

    如何在C#中将LambdaExpression转换为Expression <Func <T,bool >>

  22. 22

    为什么这个带有Expression <Func <T,bool>的模拟不匹配?

  23. 23

    动态构造Expression <Func <T,bool >>对于GreaterThen不起作用

  24. 24

    将Func <T,TProperty>转换为Expression <Func <T,Property >>

  25. 25

    将谓词<T>转换为Func <T,bool>

  26. 26

    自动停止从绑定Func <T,T,bool>的Ninject

  27. 27

    为什么`Predicate <T>`与`Func <T,bool>`不匹配?

  28. 28

    将Expression <Func <TModel,TValue >>转换为Expression <Func <TModel,bool >>

  29. 29

    将Expression <Func <TEntity,IEnumerable <TProperty >>> valueSelector,TValue []值转换为Expression <Func <TElement,bool >>

热门标签

归档