gpt4 book ai didi

c# - 我如何创建一个表达式,它要么抛出异常,要么根据条件返回一个值?

转载 作者:行者123 更新时间:2023-11-30 14:26:39 25 4
gpt4 key购买 nike

我正在努力构建一个表达式,如果条件为真则抛出异常,如果条件为假则应该返回一个值,但我总是得到 ArgumentException:

var expr =
Expression.Condition(
Expression.Equal(Expression.Constant(0), Expression.Constant(0)),
Expression.Throw(Expression.Constant(new DivideByZeroException())),
Expression.Constant(1));
var lambda = Expression.Lambda<Func<int>>(expr);
var result = lambda.Compile()();

如果我将 Expression.Empty() 作为 Condition 的第三个参数,它就会运行,但如果条件为假,我得不到想要的结果。

最佳答案

这样做。

var expr =
Expression.Block(
Expression.IfThen(
Expression.Equal(Expression.Constant(1), Expression.Constant(1)),
Expression.Throw(
Expression.New(typeof(DivideByZeroException))
)
),
Expression.Constant(1)
);
var lambda = Expression.Lambda<Func<int>>(expr);
var result = lambda.Compile()();

Conditional 更类似于三元运算符。所以你写的更等同于 C#:

return (0 == 0) ? throw new DivideByZeroException() : 1;

我将您的常量异常更改为动态创建的异常,我假设这是首选。

关于c# - 我如何创建一个表达式,它要么抛出异常,要么根据条件返回一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34773933/

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