使用Roslyn确定BinaryExpression是否为算术表达式

问题描述

使用CSharpSyntaxRewriter,我想确定特定的BinaryExpression是否是Artihmetic表达式。确定代码方法比下面的代码段更简单。

private static bool IsArithmeticoperator(BinaryExpressionSyntax node)
{
    return node.IsKind(SyntaxKind.AddExpression) ||
        node.IsKind(SyntaxKind.MultiplyExpression) ||
        node.IsKind(SyntaxKind.DivideExpression) ||
        node.IsKind(SyntaxKind.SubtractExpression) ||
        node.IsKind(SyntaxKind.ModuloExpression);
}

只是有点笨拙。

解决方法

我不确定这是否可行,但是枚举中可能有一些可以帮助您的东西, 算术表达式在枚举import {HttpClient,HttpParams,HttpHeaders} from '@angular/common/http'; import {Injectable} from '@angular/core'; @Injectable({ providedIn: 'root' }) export class MarksService { constructor(private http: HttpClient,private params: HttpParams) {} } 内按顺序排列,但SyntaxKind除外,您可以单独检查。

也许其他ModuloExpression也会满足您的需求。

SyntaxKind

因此您可以执行以下操作:

AddExpression = 307,SubtractExpression = 308,MultiplyExpression = 309,DivideExpression = 310,IntegerDivideExpression = 311,ExponentiateExpression = 314,LeftShiftExpression = 315,RightShiftExpression = 316,ConcatenateExpression = 317,ModuloExpression = 318,

更新

这仅适用于private static bool IsArithmeticOperator(BinaryExpressionSyntax node) { SyntaxKind expressionKind = node.Kind(); return (expressionKind >= SyntaxKind.AddExpression && expressionKind <= SyntaxKind.DivideExpression) || expressionKind == SyntaxKind.ModuloExpression; }

并且不会为Microsoft.CodeAnalysis.VisualBasic

工作