Дополнительные скобки в коде, сгенерированном CodeDom - PullRequest
3 голосов
/ 31 мая 2011

Я использую 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");
}

Опять же, я знаю, что лишние скобки ни на что не влияют, но если я делаю что-то не так, я хотел бы знать:)

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Я полагаю, что авторы CodeDom не считают, что преимущество немного более чистого кода не позволяет использовать драгоценное процессорное время, необходимое для определения необходимости в скобках.В некоторых других случаях они могли быть действительно необходимы.

1 голос
/ 31 мая 2011

выглядит хорошо для меня. Я получал один и тот же полученный код целую вечность.

Если вас интересует только генерация кода для C #, вы можете прописать условие с помощью CodeSnippetExpression , избегая лишних скобок. Твой путь более общий.

Под капотом IL не разрешает скобки (это работа компилятора), поэтому, если скобки могут понадобиться, они будут включены явно.

...