APISampleUnitTestsCS.FAQ.ReplaceSubExpression C# (CSharp) Метод

ReplaceSubExpression() приватный Метод

private ReplaceSubExpression ( ) : void
Результат void
        public void ReplaceSubExpression()
        {
            var tree = SyntaxTree.ParseText(@"
            class Program
            {
            static void Main()
            {
            int i = 0, j = 0;
            Console.WriteLine((i + j) - (i + j));
            }
            }");
            var compilationUnit = (CompilationUnitSyntax)tree.GetRoot();

            // Get BinaryExpressionSyntax corresponding to the two addition expressions 'i + j' above.
            BinaryExpressionSyntax addExpression1 = compilationUnit.DescendantNodes()
                .OfType<BinaryExpressionSyntax>().First(b => b.Kind == SyntaxKind.AddExpression);
            BinaryExpressionSyntax addExpression2 = compilationUnit.DescendantNodes()
                .OfType<BinaryExpressionSyntax>().Last(b => b.Kind == SyntaxKind.AddExpression);

            // Replace addition expressions 'i + j' with multiplication expressions 'i * j'.
            BinaryExpressionSyntax multipyExpression1 = Syntax.BinaryExpression(SyntaxKind.MultiplyExpression,
                addExpression1.Left,
                Syntax.Token(SyntaxKind.AsteriskToken)
                    .WithLeadingTrivia(addExpression1.OperatorToken.LeadingTrivia)
                    .WithTrailingTrivia(addExpression1.OperatorToken.TrailingTrivia),
                addExpression1.Right);
            BinaryExpressionSyntax multipyExpression2 = Syntax.BinaryExpression(SyntaxKind.MultiplyExpression,
                addExpression2.Left,
                Syntax.Token(SyntaxKind.AsteriskToken)
                    .WithLeadingTrivia(addExpression2.OperatorToken.LeadingTrivia)
                    .WithTrailingTrivia(addExpression2.OperatorToken.TrailingTrivia),
                addExpression2.Right);

            CompilationUnitSyntax newCompilationUnit = compilationUnit
                .ReplaceNodes(oldNodes: new[] { addExpression1, addExpression2 },
                              computeReplacementNode:
                                (originalNode, originalNodeWithReplacedDescendants) =>
                                {
                                    SyntaxNode newNode = null;

                                    if (originalNode == addExpression1)
                                    {
                                        newNode = multipyExpression1;
                                    }
                                    else if (originalNode == addExpression2)
                                    {
                                        newNode = multipyExpression2;
                                    }

                                    return newNode;
                                });

            Assert.AreEqual(@"
            class Program
            {
            static void Main()
            {
            int i = 0, j = 0;
            Console.WriteLine((i * j) - (i * j));
            }
            }", newCompilationUnit.ToFullString());
        }