Лучшие способы отформатировать запросы LINQ

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

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

Ниже некоторые примеры различий в форматировании этого, я придумал (для того же относительно несложного запроса)

Никакое форматирование

var allInventory = system.InventorySources.Select(src => new { Inventory = src.Value.GetInventory(product.OriginalProductId, true), Region = src.Value.Region }).GroupBy(i => i.Region, i => i.Inventory);

Поднятое форматирование

var allInventory = system.InventorySources
    .Select(src => 
        new { 
            Inventory = src.Value.GetInventory(product.OriginalProductId, true), 
            Region = src.Value.Region })
                .GroupBy(
                    i => i.Region, 
                    i => i.Inventory);

Форматирование блока

var allInventory = system.InventorySources
    .Select(
        src => new 
        { 
            Inventory = src.Value.GetInventory(product.OriginalProductId, true), 
            Region = src.Value.Region 
        })
        .GroupBy(
            i => i.Region, 
            i => i.Inventory
        );

Форматирование списка

var allInventory = system.InventorySources
    .Select(src => new { Inventory = src.Value.GetInventory(product.OriginalProductId, true), Region = src.Value.Region })
    .GroupBy(i => i.Region, i => i.Inventory);

Я хочу придумать стандарт для форматирования linq так, чтобы оно максимизировало удобочитаемость и понимание и выглядело чистым и профессиональным. До сих пор я не могу решить, таким образом, я поворачиваю вопрос профессионалам здесь.

41
задан Aren 27 May 2010 в 20:07
поделиться

4 ответа

Я остановился на блочном форматировании. Некоторое время меня беспокоило чувство "пустого пространства", но в конечном итоге все сочли, что оно лучше читается большим количеством людей. Поскольку мы уже ставили скобки на новые строки, это просто лучше сочетается с остальным кодом. Кроме того, здесь меньше возможностей для интерпретации. Мы храним файл cs в публичном хранилище, в котором есть примеры форматирования... когда кто-то придумывает уникальный кусок linq, мы добавляем его в файл... это очень помогает новичкам.

10
ответ дан 27 November 2019 в 00:56
поделиться

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

Если у меня есть довольно сложный или более крупный оператор linq, я использую блочное форматирование, чтобы другим людям было легче читать и следить за тем, что я пытался сделать.

Я не думаю, что иметь разное форматирование для разных операторов - плохая практика, если вы согласны с тем, как вы подходите к этому.

3
ответ дан 27 November 2019 в 00:56
поделиться

Мое форматирование:

var allInventory = system.InventorySources
  .Select(src => new
  {
    Inventory = src.Value.GetInventory(product.OriginalProductId, true),
    Region = src.Value.Region
  })
  .GroupBy(
    i => i.Region,
    i => i.Inventory
  );

Примечания:

  • Открывающие паренсы в методах никогда не стоят новой строки.
  • Закрывающие парены соответствуют отступам строки, содержащей открывающий парен.
  • src => new остается на той же строке, что и Select, потому что он просто не заслуживает новой строки.
  • Анонимный тип всегда получает блочную обработку, как если бы он использовался вне запроса (но закрывающее паренс не заслуживает новой строки).
  • Перегрузка GroupBy с двумя параметрами обычно не вызывается. Хотя она может легко уместиться на одной строке, используйте дополнительную строку, чтобы было понятно, что происходит что-то необычное.
19
ответ дан 27 November 2019 в 00:56
поделиться

Это очень субъективно.

Я использую метод форматирования блоков.

Я также проверяю код на Stylecop и убеждаюсь, что он не выдает никаких предупреждений stylecop.

0
ответ дан 27 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: