CodeDom生成的代码中有额外的括号

本文关键字:代码 CodeDom | 更新日期: 2023-09-27 17:58:04

我正在使用CodeDom生成稍后要编译的代码,我注意到某些构造会创建额外的括号集。虽然我知道它们不会影响任何事情,但它们看起来确实很奇怪。

这样做的代码示例是:

new CodeConditionStatement(
  new CodeBinaryOperatorExpression(
    new CodePropertyReferenceExpression(new CodePropertySetValueReferenceExpression(), 
      "Length"),
    CodeBinaryOperatorType.GreaterThan,
    new CodePrimitiveExpression(strLength)
  ),
  new CodeThrowExceptionStatement(
    new CodeObjectCreateExpression(typeof(ArgumentException), 
    new CodePrimitiveExpression("The string is too long"), 
    new CodePrimitiveExpression("value"))
  )
)

这会生成以下代码段:

if ((value.Length > 50)) {
    throw new System.ArgumentException("The string is too long", "value");
}

同样,我知道额外的括号不会影响任何事情,但如果我做错了什么,我想知道:)

CodeDom生成的代码中有额外的括号

我的猜测是,CodeDom的作者并不认为使用更干净的代码的优势会超过使用检测括号需求所需的宝贵CPU时间。在其他一些情况下,他们可能真的很需要。

我觉得不错。多年来,我一直得到相同的结果代码。

如果你只对C#的代码生成感兴趣,你可以用CodeSnippetExpression来拼写条件,避免使用额外的括号。你的方式更一般。

在后台,IL不进行括号解析(这是编译器的工作),所以如果可能需要括号,它们将被显式包含。