2017-03-14 2 views
0

Ich frage mich, wie komplex wenn in C# -Syntax dargestellte Anweisungen in CodeDom übersetzt würden. Es gibt wahrscheinlich kein CodeDom-Expression-Objekt zur Darstellung einer Gruppierung (dargestellt als runde Klammern in C#), da dies möglicherweise sprachabhängig ist, was CodeDom nicht ist.Komplexe if-Anweisung mit CodeDom

Also für Diskussionszwecke, f ich habe eine hypothetische komplexe if-Anweisung wie folgt (übermäßige Einzüge nur für die Lesbarkeit ...) Wie stelle ich das in einem CodeDom-Ausdruck dar?

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

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

      && 
      C == 123       


);//end if 

Antwort

0

Oh, ich glaube, ich realisiert, wie das funktioniert ... Es läuft alles auf Darstellen jedes einzelnen Vergleich mit einem binären Operator Ausdrucksobjekt.

So im Wesentlichen würde ich mit einer Reihe von verschachtelten CodeBinaryOperatorExpression Objekten am Ende, die zusammen über die linke und rechte Code Ausdrücke verkettet sind ...

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