在您忽略/投票关闭此问题之前,我认为这是一个有效的问题,因为代码清晰度是一个重要的讨论话题,这对于编写可维护的代码,我非常感谢那些之前遇到过这些代码的人的答案。
我最近遇到了这个问题,由于嵌套量很大,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格式的标准,以便最大限度地提高可读性和安全性。理解,看起来干净,专业。到目前为止,我无法决定,所以我将问题转交给专业人士。
答案 0 :(得分:19)
我的格式:
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
);
注意:
答案 1 :(得分:10)
我已经确定了Block格式。它暂时困扰了我对“浪费空间”的感觉,但最终每个人都觉得它更容易被更多人阅读。由于我们已经在新行上添加了大括号,因此它与其余代码更合适。解释的空间也较小。我们在公共商店中保存了一个带有格式化示例的cs文件......当有人想出一个独特的linq大块时,我们将它添加到文件中......真的有助于新人。
答案 2 :(得分:3)
对我来说,这取决于我必须进行的查询的长度。对于简短的简单语句,如基本选择或简单连接,我将使用列表格式化,因为它使得它很好并且易于阅读而不会将我的代码放在大量的行上。
如果我倾向于使用相当复杂或更大的linq语句,我会使用块格式化,以便其他人更容易阅读并遵循我想要做的事情。
我不认为对不同的陈述采用不同的格式是不好的做法,只要你对它的处理方式一致。
答案 3 :(得分:0)
非常主观。
我使用块格式化方法。
我还会检查针对Stylecop的代码,并确保它不会产生任何样式警告。