【问题标题】:Cannot implicitly convert type 'System.Func<T, bool>' to 'bool'无法将类型“System.Func<T, bool>”隐式转换为“bool”
【发布时间】:2017-06-13 15:14:24
【问题描述】:

我会责怪疲倦,虽然这个真的让我很开心

var result = Expression.Lambda<Func<T, bool>>(expression, parameterType).Compile();

出现错误:无法将类型“System.Func”隐式转换为“bool”

正如您可能已经猜到的那样,我需要它返回一个 bool 而不是 Func

提前致谢

【问题讨论】:

  • 所以您已经编写了一个编译为 lambda 的表达式。你现在需要调用它,比如result(someValueForT)
  • 什么是expression
  • 我猜你需要添加 (): ....Compile()(default(T)) 返回一个布尔值。但你需要解释得更好,以免人们盲目猜测。
  • 抱歉信息不足。我希望实现类似于此处stackoverflow.com/questions/6488034/… 所示的此规则引擎实现的东西,尽管我不只是返回规则的结果,而是想捕获规则“描述”的附加属性。然后这将返回一个 RuleResults 列表,该列表将识别哪个规则失败及其描述我找不到调用已编译规则并仍保留其描述属性的方法

标签: .net c#-4.0 lambda expression


【解决方案1】:
public class Class1<T>
{
    public Class1()
    {
        var result = Expression.Lambda<Func<T, bool>>(null, new[] {new ParameterExpression()});
        var method = result.Compile();
        bool result = method(new T());
    }
}

这对我来说编译得非常好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多