gpt4 book ai didi

c# - 用表达式编写自己的断言函数

转载 作者:太空狗 更新时间:2023-10-30 00:40:18 24 4
gpt4 key购买 nike

我想创建自己的 Assert方法类似于下面的代码,但它不起作用。

// Method Usage
Argument.Assert(() => Measurements.Count > 0);

// Method Implementation
public static void Assert(Expression<bool> expression)
{
bool value = expression.Compile();
if(!value)
{
throw new InvalidOperationException("Assert: " + expression.ToString() + " may not be false!");
}
}

我在这里做错了什么?错误是:'Error 1 Cannot convert lambda to an expression tree whose type argument 'bool' is not a delegate type' .

首先我有 Expression<Func<bool>> expressionexpression.Compile()()但这总是因 TargetInvocationException 而崩溃.

最佳答案

Expression<bool>无效,因为 T 必须是委托(delegate)类型。 Expression<Func<bool>>是有效的,虽然我不确定为什么你更喜欢它而不是简单的 Func<bool> .那是你的决定。

这应该可行

public static void Assert(Expression<Func<bool>> expression)
{
if (!expression.Compile().Invoke())
{
throw new InvalidOperationException(String.Format("Assert: {0} may not be false!", expression.ToString()));
}
}

关于c# - 用表达式编写自己的断言函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28984942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com