Лучшие способы форматирования запросов 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, чтобы он максимально читал и понимал и выглядел чистым и профессиональным. Пока я не могу решить, поэтому я передаю вопрос профессионалам.
Ответы
Ответ 1
Я установил форматирование блока. Это беспокоило мое чувство "потраченного впустую пространства" на некоторое время, но в конечном итоге все чувствовали, что его читают больше людей. Поскольку мы уже размещали фигурные скобки на новых строках, он просто лучше сочетался с остальной частью кода. Существует также меньше возможностей для интерпретации. Мы сохраняем файл cs в общедоступном хранилище с примерами форматирования... когда кто-то придумывает уникальный кусок linq, мы добавляем его в файл... действительно помогает новым парням.
Ответ 2
Мое форматирование:
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= > остается в той же строке, что и Select, потому что он просто не достоин новой строки.
- Анонимный тип всегда получает блочную обработку, как если бы он использовался вне запроса (но закрывающий парен не достоин новой строки).
- Два параметра GroupBy перегрузки обычно не вызываются. Хотя он может легко вписаться в одну строку, используйте дополнительную строку, чтобы было ясно, что происходит что-то необычное.
Ответ 3
Для меня это зависит от длины запроса, который я должен выполнить. Для кратких простых утверждений, таких как базовый выбор или простые объединения, я перейду с форматированиемList, потому что это делает его приятным и удобным для чтения, не подвергая мой код нагрузке строк.
Если я склонен иметь довольно сложный или более высокий оператор linq, я иду с форматированием блока, чтобы он облегчал чтение другим людям и выполнял то, что я пытался сделать.
Я не считаю, что плохая практика имеет разные форматы для разных операторов, если вы согласны с тем, как вы к ней подходите.
Ответ 4
Это очень субъективно.
Я использую метод форматирования блоков.
Я также проверяю код на Stylecop и удостоверяюсь, что он не дает предупреждения о стилевом стиле.