执行/调用ConditionalExpression来决定是否使用true- or - false部分

本文关键字:true- or 部分 false 是否 调用 ConditionalExpression 决定 执行 | 更新日期: 2023-09-27 18:15:04

我希望能够从给定表达式构建propertyname-chain。我从这里获取了对话的来源(链接)。

如果按照上面描述的方式使用,效果非常好。

我现在的问题是当我传递一个条件表达式时,例如

Foo((MyClass c) => createChain ?c.SomeProperty: null);

createChainbool,而在Foo内部,第一个检查是expr != null进一步。

然而,expr.Body.NodeType现在是ExpressionType.Conditional,我找不到正确的方法来执行/调用表达式,所以我知道我应该为me设置表达式的哪一部分(真或假)。

我添加了case ExpressionType.Conditional:和cast var ce = expr as ConditionalExpression。我如何从ce获得用于me的正确表达式,因为一个是c.SomeProperty,而另一个将是null,具体取决于createChain的值。

case ExpressionType.Conditional:
    var ce = expr.Body as ConditionalExpression;
    me = (MemberExpression) (ce != null && /*ce.Invoke()*/ ? ce.IfTrue : ce.IfFalse); // here i need to know if to use true or false part of expr
    break;

执行/调用ConditionalExpression来决定是否使用true- or - false部分

试试这个:

            case ExpressionType.Conditional:
                var ce = expr.Body as ConditionalExpression;
                var cond = (MemberExpression)ce.Test;
                me = (MemberExpression) (ce != null && (bool)(Expression.Lambda(cond).Compile().DynamicInvoke()) ? ce.IfTrue : ce.IfFalse); 
                break;