当前位置: 首页>>代码示例>>C#>>正文


C# BinaryExpressionSyntax.Kind方法代码示例

本文整理汇总了C#中BinaryExpressionSyntax.Kind方法的典型用法代码示例。如果您正苦于以下问题:C# BinaryExpressionSyntax.Kind方法的具体用法?C# BinaryExpressionSyntax.Kind怎么用?C# BinaryExpressionSyntax.Kind使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在BinaryExpressionSyntax的用法示例。


在下文中一共展示了BinaryExpressionSyntax.Kind方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: TryFlip

 static bool TryFlip(BinaryExpressionSyntax expr, out SyntaxKind flippedKind, out string operatorText)
 {
     switch (expr.Kind())
     {
         case SyntaxKind.LessThanExpression:
             flippedKind = SyntaxKind.GreaterThanExpression;
             operatorText = ">";
             return true;
         case SyntaxKind.LessThanOrEqualExpression:
             flippedKind = SyntaxKind.GreaterThanOrEqualExpression;
             operatorText = ">=";
             return true;
         case SyntaxKind.GreaterThanExpression:
             flippedKind = SyntaxKind.LessThanExpression;
             operatorText = "<";
             return true;
         case SyntaxKind.GreaterThanOrEqualExpression:
             flippedKind = SyntaxKind.LessThanOrEqualExpression;
             operatorText = "<=";
             return true;
     }
     flippedKind = SyntaxKind.None;
     operatorText = null;
     return false;
 }
开发者ID:alecor191,项目名称:RefactoringEssentials,代码行数:25,代码来源:FlipRelationalOperatorArgumentsCodeRefactoringProvider.cs

示例2: ChangeOperator

 private static BinaryExpressionSyntax ChangeOperator(BinaryExpressionSyntax binary)
 {
     return
         SyntaxFactory.BinaryExpression(
             OppositeExpressionKinds[binary.Kind()],
             binary.Left,
             binary.Right)
         .WithTriviaFrom(binary);
 }
开发者ID:Azzhag,项目名称:sonarlint-vs,代码行数:9,代码来源:BooleanCheckInvertedCodeFixProvider.cs

示例3: VisitBinaryExpression

        public override void VisitBinaryExpression(BinaryExpressionSyntax node)
        {
            node.Left.Accept(this);
            node.Right.Accept(this);

            switch (node.Kind())
            {
                case SyntaxKind.LogicalAndExpression:
                case SyntaxKind.LogicalOrExpression:
                    break;
                default:
                    throw new InvalidPreprocessorExpressionException("Expected logical and/or expression");
            }
        }
开发者ID:transformersprimeabcxyz,项目名称:_TO-DO-codeformatter-dotnet,代码行数:14,代码来源:PreprocessorSymbolTracker.cs

示例4: VisitBinaryExpression

        public override SyntaxNode VisitBinaryExpression(BinaryExpressionSyntax node)
        {
            Tristate leftState = _expressionEvaluator.EvaluateExpression(node.Left);
            Tristate rightState = _expressionEvaluator.EvaluateExpression(node.Right);

            var left = (ExpressionSyntax)node.Left.Accept(this);
            var right = (ExpressionSyntax)node.Right.Accept(this);

            if (node.Left != left)
            {
                node = node.WithLeft(left);
            }

            if (node.Right != right)
            {
                node = node.WithRight(right);
            }

            if (leftState != Tristate.Varying && rightState != Tristate.Varying)
            {
                return node;
            }

            ExpressionSyntax newExpression = null;

            if (node.Kind() == SyntaxKind.LogicalAndExpression)
            {
                if (leftState == Tristate.True)
                {
                    // true && varying == varying
                    newExpression = right;
                }
                else if (rightState == Tristate.True)
                {
                    // varying && true == varying
                    newExpression = left;
                }
            }
            else if (node.Kind() == SyntaxKind.LogicalOrExpression)
            {
                if (leftState == Tristate.False)
                {
                    // false || varying == varying
                    newExpression = right;
                }
                else if (rightState == Tristate.False)
                {
                    // varying || false == varying
                    newExpression = left;
                }
            }

            if (newExpression != null)
            {
                return newExpression
                    .WithLeadingTrivia(node.GetLeadingTrivia())
                    .WithTrailingTrivia(node.GetTrailingTrivia());
            }

            return node;
        }
开发者ID:transformersprimeabcxyz,项目名称:_TO-DO-codeformatter-dotnet,代码行数:61,代码来源:PreprocessorExpressionSimplifier.cs

示例5: VisitBinaryExpression

            public override SyntaxNode VisitBinaryExpression(BinaryExpressionSyntax node)
            {
                _cancellationToken.ThrowIfCancellationRequested();

                // Special case: We parenthesize to avoid a situation where inlining an
                // expression can cause code to parse differently. The canonical case is...
                //
                //     var x = 0;
                //     var y = (1 + 2);
                //     var z = new[] { x < x, x > y };
                //
                // Inlining 'y' in the code above will produce code that parses differently
                // (i.e. as a generic method invocation).
                //
                //      var z = new[] { x < x, x > (1 + 2) };

                var result = (BinaryExpressionSyntax)base.VisitBinaryExpression(node);

                if ((node.Kind() == SyntaxKind.GreaterThanExpression || node.Kind() == SyntaxKind.RightShiftExpression) && !node.IsParentKind(SyntaxKind.ParenthesizedExpression))
                {
                    return result.Parenthesize();
                }

                return result;
            }
开发者ID:RoryVL,项目名称:roslyn,代码行数:25,代码来源:CSharpSimplificationService.Expander.cs

示例6: TryGenerateBinaryOperation

        private bool TryGenerateBinaryOperation(BinaryExpressionSyntax binaryExpression)
        {
            BinaryOperatorKind kind;
            switch (binaryExpression.Kind())
            {
                case SyntaxKind.AddExpression:
                    kind = BinaryOperatorKind.Plus;
                    break;
                case SyntaxKind.BitwiseOrExpression:
                    kind = BinaryOperatorKind.BitwiseOr;
                    break;
                case SyntaxKind.BitwiseAndExpression:
                    kind = BinaryOperatorKind.BitwiseAnd;
                    break;
                default:
                    return false;
            }

            using (BinaryOperationTag(kind))
            {
                return TryGenerateExpression(binaryExpression.Left)
                    && TryGenerateExpression(binaryExpression.Right);
            }
        }
开发者ID:ehsansajjad465,项目名称:roslyn,代码行数:24,代码来源:MethodXmlBuilder.cs

示例7: VisitBinaryExpression

 public override bool VisitBinaryExpression(BinaryExpressionSyntax node)
 {
     switch (node.Kind())
     {
         case SyntaxKind.LogicalAndExpression:
         case SyntaxKind.LogicalOrExpression:
             return Visit(node.Left);
     }
     return base.VisitBinaryExpression(node);
 }
开发者ID:ceddlyburge,项目名称:RefactoringEssentials,代码行数:10,代码来源:FunctionNeverReturnsAnalyzer.cs

示例8: AnalyzeComparisonWithFlags

        static bool AnalyzeComparisonWithFlags(BinaryExpressionSyntax boP, out ExpressionSyntax flagsExpression, out ExpressionSyntax targetExpression, out bool testFlagset)
        {
            var left = boP.Left.SkipParens();
            var right = boP.Right.SkipParens();

            testFlagset = boP.Kind() != SyntaxKind.EqualsExpression;
            flagsExpression = targetExpression = null;

            BinaryExpressionSyntax primExp;

            if (left.IsKind(SyntaxKind.BitwiseAndExpression))
            {
                primExp = left as BinaryExpressionSyntax;
                flagsExpression = right;
            }
            else
            {
                primExp = right as BinaryExpressionSyntax;
                flagsExpression = left;
            }

            if (primExp == null)
                return false;

            if (primExp.Left.IsEquivalentTo(flagsExpression))
            {
                DecomposeBinaryOperator(primExp, out flagsExpression, out targetExpression);
                return true;
            }

            if (primExp.Right.IsEquivalentTo(flagsExpression))
            {
                DecomposeBinaryOperator(primExp, out flagsExpression, out targetExpression);
                return true;
            }

            return false;
        }
开发者ID:alecor191,项目名称:RefactoringEssentials,代码行数:38,代码来源:ConvertBitwiseFlagComparisonToHasFlagsCodeRefactoringProvider.cs

示例9: AnalyzeComparisonWithNull

        static bool AnalyzeComparisonWithNull(BinaryExpressionSyntax boP, out ExpressionSyntax flagsExpression, out ExpressionSyntax targetExpression, out bool testFlagset)
        {
            var left = boP.Left.SkipParens();
            var right = boP.Right.SkipParens();
            testFlagset = boP.Kind() == SyntaxKind.EqualsExpression;
            flagsExpression = targetExpression = null;

            ExpressionSyntax primExp;
            BinaryExpressionSyntax binOp;
            if (left.IsKind(SyntaxKind.NumericLiteralExpression))
            {
                primExp = left;
                binOp = right as BinaryExpressionSyntax;
            }
            else
            {
                primExp = right;
                binOp = left as BinaryExpressionSyntax;
            }

            if (binOp == null)
            {
                return false;
            }

            DecomposeBinaryOperator(binOp, out flagsExpression, out targetExpression);
            return primExp != null && primExp.ToString() == "0";
        }
开发者ID:alecor191,项目名称:RefactoringEssentials,代码行数:28,代码来源:ConvertBitwiseFlagComparisonToHasFlagsCodeRefactoringProvider.cs

示例10: VisitBinaryExpression

            public override SyntaxNode VisitBinaryExpression(BinaryExpressionSyntax node)
            {
                bool isOrAsNode = node.Kind() == SyntaxKind.AsExpression || node.Kind() == SyntaxKind.IsExpression;

                var result = (ExpressionSyntax)base.VisitBinaryExpression(node);

                if (result != node && isOrAsNode)
                {
                    // In order to handle cases in which simplifying a name would result in code
                    // that parses different, we pre-emptively add parentheses that will be
                    // simplified away later.
                    //
                    // For example, this code...
                    //
                    //     var x = y as Nullable<int> + 1;
                    //
                    // ...should simplify as...
                    //
                    //     var x = (y as int?) + 1;
                    return result.Parenthesize().WithAdditionalAnnotations(Formatter.Annotation);
                }

                return result;
            }
开发者ID:Rickinio,项目名称:roslyn,代码行数:24,代码来源:CSharpNameReducer.Rewriter.cs

示例11: IsComparisonOfZeroAndSomethingNeverLessThanZero

        private bool IsComparisonOfZeroAndSomethingNeverLessThanZero(BinaryExpressionSyntax binaryExpression, SemanticModel semanticModel, CancellationToken cancellationToken)
        {
            var canSimplify = false;

            if (binaryExpression.Kind() == SyntaxKind.GreaterThanExpression &&
                binaryExpression.Right.Kind() == SyntaxKind.NumericLiteralExpression)
            {
                canSimplify = CanSimplifyToLengthEqualsZeroExpression(
                    binaryExpression.Left,
                    (LiteralExpressionSyntax)binaryExpression.Right,
                    semanticModel,
                    cancellationToken);
            }
            else if (binaryExpression.Kind() == SyntaxKind.LessThanExpression &&
                     binaryExpression.Left.Kind() == SyntaxKind.NumericLiteralExpression)
            {
                canSimplify = CanSimplifyToLengthEqualsZeroExpression(
                    binaryExpression.Right,
                    (LiteralExpressionSyntax)binaryExpression.Left,
                    semanticModel,
                    cancellationToken);
            }
            else if (binaryExpression.Kind() == SyntaxKind.EqualsExpression &&
                     binaryExpression.Right.Kind() == SyntaxKind.NumericLiteralExpression)
            {
                canSimplify = CanSimplifyToLengthEqualsZeroExpression(
                    binaryExpression.Left,
                    (LiteralExpressionSyntax)binaryExpression.Right,
                    semanticModel,
                    cancellationToken);
            }
            else if (binaryExpression.Kind() == SyntaxKind.EqualsExpression &&
                     binaryExpression.Left.Kind() == SyntaxKind.NumericLiteralExpression)
            {
                canSimplify = CanSimplifyToLengthEqualsZeroExpression(
                    binaryExpression.Right,
                    (LiteralExpressionSyntax)binaryExpression.Left,
                    semanticModel,
                    cancellationToken);
            }

            return canSimplify;
        }
开发者ID:RoryVL,项目名称:roslyn,代码行数:43,代码来源:InvertIfCodeRefactoringProvider.cs

示例12: BindSimpleBinaryOperator

        private BoundExpression BindSimpleBinaryOperator(BinaryExpressionSyntax node, DiagnosticBag diagnostics)
        {
            // The simple binary operators are left-associative, and expressions of the form
            // a + b + c + d .... are relatively common in machine-generated code. The parser can handle
            // creating a deep-on-the-left syntax tree no problem, and then we promptly blow the stack during
            // semantic analysis. Here we build an explicit stack to handle the left-hand recursion.

            Debug.Assert(IsSimpleBinaryOperator(node.Kind()));

            var syntaxNodes = ArrayBuilder<BinaryExpressionSyntax>.GetInstance();

            ExpressionSyntax current = node;
            while (IsSimpleBinaryOperator(current.Kind()))
            {
                var binOp = (BinaryExpressionSyntax)current;
                syntaxNodes.Push(binOp);
                current = binOp.Left;
            }

            int compoundStringLength = 0;

            BoundExpression result = BindExpression(current, diagnostics);

            if (node.IsKind(SyntaxKind.SubtractExpression)
                && current.IsKind(SyntaxKind.ParenthesizedExpression))
            {
                if (result.Kind == BoundKind.TypeExpression
                    && !((ParenthesizedExpressionSyntax)current).Expression.IsKind(SyntaxKind.ParenthesizedExpression))
                {
                    Error(diagnostics, ErrorCode.ERR_PossibleBadNegCast, node);
                }
                else if (result.Kind == BoundKind.BadExpression)
                {
                    var parenthesizedExpression = (ParenthesizedExpressionSyntax) current;

                    if (parenthesizedExpression.Expression.IsKind(SyntaxKind.IdentifierName)
                        && ((IdentifierNameSyntax) parenthesizedExpression.Expression).Identifier.ValueText == "dynamic")
                    {
                        Error(diagnostics, ErrorCode.ERR_PossibleBadNegCast, node);
                    }
                }
            }

            while (syntaxNodes.Count > 0)
            {
                BinaryExpressionSyntax syntaxNode = syntaxNodes.Pop();
                BindValueKind bindValueKind = GetBinaryAssignmentKind(syntaxNode.Kind());
                BoundExpression left = CheckValue(result, bindValueKind, diagnostics);
                BoundExpression right = BindValue(syntaxNode.Right, diagnostics, BindValueKind.RValue);
                BoundExpression boundOp = BindSimpleBinaryOperator(syntaxNode, diagnostics, left, right, ref compoundStringLength);
                result = boundOp;
            }

            syntaxNodes.Free();
            return result;
        }
开发者ID:TyOverby,项目名称:roslyn,代码行数:56,代码来源:Binder_Operators.cs


注:本文中的BinaryExpressionSyntax.Kind方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。