"избыточная запятая в инициализаторе массива", почему это должно быть исправлено - PullRequest
2 голосов
/ 05 декабря 2011

С ReSharper 6.0 я получил новое предупреждение:

redundant comma in array initializer

для случая, когда у меня есть список параметров инициализатора массива с запятой в конце.

Что в этом плохого? Почему мне нравится «мой» подход в том, что мне часто нужно комментировать последние значения и не хочу беспокоиться об исправлении этих «ведущих» запятых:

    private readonly string[] _tables
        = new[]
              {
                  "users",
                  "user_account",
                  "user_budget_type",
                  //"user_budget"
              };

Пожалуйста, посоветуйте, что хорошего в том, чтобы следовать этому предложению.

Спасибо.

Ответы [ 5 ]

5 голосов
/ 05 декабря 2011

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

private readonly string[] _tables
    = new[]
          {
              "users"
              ,"user_account"
              ,"user_budget_type"
              //,"user_budget"
          };
3 голосов
/ 05 декабря 2011

Подсказка в тексте сообщения:

избыточная запятая в инициализаторе массива

Что это означает?Ну, ваш код:

private readonly string[] _tables
    = new[]
          {
              "users",
              "user_account",
              "user_budget_type",
              //"user_budget"
          };

и код с проверкой, на которую действовали:

private readonly string[] _tables
    = new[]
          {
              "users",
              "user_account",
              "user_budget_type"
              //"user_budget"
          };

семантически эквивалентны .То есть CIL, создаваемый в каждом случае, идентичен - нет различий в поведении.Таким образом, запятая ничего не меняет и поэтому является избыточной.

Теперь, что касается вашего вопроса:

Что в этом плохого?

Это в значительной степени зависит отвы.R # просто имеет такую ​​избыточность как проверка , но именно вы (принимая ваши настройки по умолчанию) классифицировали ее как предупреждение .

Если эта конструкция приемлема для вашего стиля, тогда непременно измените уровень проверки в параметрах R #;но в общем , значения по умолчанию для опций R # - это те, которые вырабатывают довольно близко к минимальному количеству необходимого кода.

3 голосов
/ 05 декабря 2011

ReSharper полон предложений. Как и любой другой инструмент повышения производительности, в конечном итоге вам решать, следует ли действовать в соответствии с этими предложениями.

Например, в то время как язык C # допускает использование запятой или пустых тел управляющего оператора (помещая ; для тела цикла), или даже вводит дубликат ;; в конце оператора. Для всех этих вещей ReSharper предложит вам удалить избыточность, потому что это то, что он делает - эвристически обнаруживает избыточность. Если вы знаете лучше, есть несколько способов «заставить замолчать» ReSharper, предложив это:

  1. Temp. подавить предупреждение с помощью специальных комментариев (выберите быстрое исправление «Подавить проверку ... с комментарием»):

    private readonly string[] _tables = new[]
    {
        "users",
        "user_account",
    // ReSharper disable RedundantCommaInArrayInitializer
        "user_budget_type",
    // ReSharper restore RedundantCommaInArrayInitializer
        //"user_budget"
    };
    

или 2. Полностью подавьте это предупреждение, выбрав «Параметры проверки для ...» и выбрав «Не показывать» в параметрах.

Все дело в выборе и личных предпочтениях - вы можете настроить практически все, что захотите, в инструменте.

0 голосов
/ 08 мая 2014

@ Будда, в отличие от других, эта избыточная запятая eval! В некоторых браузерах, например IE8, это может привести к неправильному пониманию браузером и неправильному созданию объекта.

См., Например, этот ответ , где завершающая запятая заставила библиотеку Highcharts перестать работать.

Поддержание чистоты вашего кода - это не только вопрос облегчения чтения и отладки. Даже если вы видите, что ваш код работает с этой запятой, это не значит, что он будет работать одинаково со всеми браузерами.

0 голосов
/ 05 декабря 2011

Вы можете подавить это предупреждение, Resharper просто говорит это, на тот случай, если вам не все равно:)

...