50

在您忽略/投票关闭这个问题之前,我认为这是一个有效的问题,因为代码清晰度是一个重要的讨论主题,它对于编写可维护的代码至关重要,我非常感谢那些以前遇到过这个问题的人的回答.

我最近遇到了这个问题,由于大量的嵌套,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 格式的标准,以便它最大限度地提高可读性和理解性,并且看起来干净和专业。到目前为止,我无法决定,所以我将问题转向这里的专业人士。

4

4 回答 4

25

我的格式:

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 重载。虽然它可以很容易地放在一条线上,但使用额外的线来清楚地表明正在发生一些不寻常的事情。
于 2010-05-27T21:50:37.193 回答
14

我已经确定了块格式。它困扰了我一段时间的“浪费空间”的感觉,但最终每个人都觉得它对更多人来说更具可读性。由于我们已经在新行上放置了大括号,因此它更适合其余代码。解释的空间也较小。我们在公共商店中保留了一个包含格式化示例的 cs 文件……当有人提出一个独特的 linq 块时,我们将其添加到文件中……对新人很有帮助。

于 2010-05-27T20:29:10.197 回答
3

对我来说,这取决于我必须进行的查询的长度。对于像基本选择或简单连接这样的简短语句,我将使用List Formatting,因为它使它变得美观且易于阅读,而无需将我的代码放在大量行上。

如果我倾向于有一个相当复杂或更大的 linq 语句,我会使用块格式,以便其他人更容易阅读和遵循我正在尝试做的事情。

我不认为对不同的语句使用不同的格式是不好的做法,只要你与你处理它的方式一致。

于 2010-05-27T20:28:41.350 回答
0

它非常主观。

我使用块格式化方法。

我还对照 Stylecop 检查代码,并确保它不会产生任何 stylecop 警告。

于 2010-05-27T20:10:07.220 回答