繁体   English   中英

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

[英]Extra parentheses in CodeDom-generated code

我正在使用 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");
}

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

在我看来很好。 多年来,我一直得到相同的结果代码。

如果您只对 C# 的代码生成感兴趣,您可以使用CodeSnippetExpression拼出条件,避免使用额外的括号。 你的方法更通用。

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

我的猜测是,CodeDom 的作者并不觉得更简洁的代码的优势会抵消使用检测括号需要所需的宝贵 CPU 时间。 在其他一些情况下,它们可能确实是需要的。

暂无
暂无

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

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