2011-05-30 52 views
3

我使用CodeDom生成代码以后编译,我注意到某些构造会创建额外的括号。虽然我知道它们不会影响任何东西,但看起来很奇怪。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"); 
} 

再次,我知道额外的括号不会影响任何东西,但如果我做错了这样做,我想知道:)

回答

1

我的猜测是CodeDom的作者并不觉得比较简洁的代码的优点会减少使用贵重的CPU时间来检测括号的需要。在其他一些情况下,他们可能真的很需要。

+0

这似乎与任何事情一样合理。毕竟,生成的代码并不意味着被查看:) – 2011-05-30 20:57:46

+0

@Mike Caron:除了当您试图调试生成的代码或代码生成器本身时。去过也做过。 (并不是说这是一个额外的大括号问题,但:-) – 2011-05-31 04:25:00

1

看起来不错。我已经得到了相同的结果代码的年龄。

如果您只对C#的代码感兴趣,则可以用CodeSnippetExpression来说明条件,避免使用额外的括号。你的方式更一般。 IL不做圆括号解析(这是编译器的工作),所以如果可能需要括号,它们将被明确地包括在内。