我正在使用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");
}
同样,我知道额外的括号不会影响任何事情,但如果我做错了,我想知道:)
答案 0 :(得分:1)
对我来说很好看。我已经获得了相同的结果代码多年。
如果您只对C#的代码生成感兴趣,可以使用CodeSnippetExpression拼出条件,避免使用额外的括号。你的方式更为通用。
在幕后,IL没有做括号分辨率(这是编译器的工作),所以如果可能需要括号,它们将被明确包含。</ p>
答案 1 :(得分:1)
我的猜测是,CodeDom的作者并不觉得更清洁代码的优势会影响使用检测括号需要所需的宝贵CPU时间。在其他一些情况下,他们可能真的需要。