使用CodeDom的复杂if语句

时间:2017-03-14 04:38:24

标签: c# .net c#-4.0 codedom

我想知道在c#语法中表示的if语句有多复杂会转化为CodeDom。可能没有CodeDom Expression对象来表示分组(在c#中表示为圆括号),因为它可能被认为是潜在的语言依赖,CodeDom不是。

因此,出于讨论目的,我有一个假设的复杂if语句如下(过度缩进只是为了可读性......)我如何在CodeDom表达式中表示它?

if (
            ( 
                (
                    x == 1                  
                    &&              
                    y == 2                  

                    &&                 
                    z == 3                    
                )                           
                ||
                (
                    x == 2                  
                    &&              
                    y == 1                  
                 )                          
            )                               
            ||      
            (
                (
                    A == 1                  
                    ||              
                    A == 3                  
                )                           
                &&
                (
                    B == 2                  
                    ||              
                    B == 5                  
                )                           
            )                               

            &&
            C == 123                          


);//end if

1 个答案:

答案 0 :(得分:0)

哦,我想我意识到这是如何运作的...... 这一切都归结为用二元运算符表达式对象表示每个单独的比较。

基本上我最终会得到一系列嵌套的CodeBinaryOperatorExpression对象,这些对象通过左右代码表达式链接在一起......

if ( 
     (
        ( 
            (
                x == 1                  //A
                &&              
                y == 2                  //B
                                        //C == A && B
                &&                 
                y == 3                  //D  
            )                           //E = C && D
            ||
            (
                x == 2                  //F
                &&              
                y == 1                  //G
             )                          //H == F && G
        )                               //I == E || H
        ||      
        (
            (
                A == 1                  //J
                ||              
                A == 3                  //K
            )                           //L = J || K
            &&
            (
                B == 2                  //M
                ||              
                B == 5                  //N
            )                           //O = M || N
        )                               //P = L && O
      )                                 //Q = I || P
      &&
      z = 123                           //R 
                                        //S = Q && R
   ) //end if