繁体   English   中英

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

[英]Using Roslyn to determine if a BinaryExpression is an arithmetic expression

使用 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);
}

就是觉得有点笨重。

我不确定这是可能的,但枚举中有一些东西可能对您有所帮助,算术表达式在枚举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

并且不适用于Microsoft.CodeAnalysis.CSharp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM