使用Resharper格式化Foreach格式

时间:2014-11-10 19:03:26

标签: c# linq resharper

在使用C#进行编码时(对于Windows Phone应用程序,但我认为它不相关),我写了一个基本的foreach语句,然后Resharper用自动修正打了我。我完全不了解他所创造的陈述。

以下是原始代码:

foreach (var val in settings.Values) 
{
    var valInfo = new ValueInfo(val.Value);
    FooMethod(val);
}  

这是Resharper代码。它告诉我它与Linq有关,但是根据我在MSDN中读到的内容,我没有看到与我的代码的关系。

foreach (var val in from val in settings.Values 
         let valInfo = new ValueInfo(val.Value) 
         select val) 
{
    FooMethod(val);
}

有人可以向我解释为什么我的陈述与Resharper的陈述相似吗?

2 个答案:

答案 0 :(得分:1)

嗯,它只是试图用foreach语句中的第一行来压缩foreach的条件(let valInfo = new ValueInfo(val.Value行设置你的valInfo变量)。它肯定看起来像ReSharper那样糟糕,所以,嘿,你可以随意忽略这个建议,并保留你拥有的东西。

但是,如果你真的感到非常好奇......

ReSharper的foreach护发素的第一部分与你的相同,即

var val in

然后,如果忽略以let开头的行,则会留下语句

var val in (from val in settings.Values select val)

我为了清楚起见添加了括号。这基本上是在说from thisColumn in someResultSet select thisColumn。如果您熟悉SQL,那么这将有所帮助。

同样,添加var val in (from val in settings.Values select val)废话的原因是它可以使你的foreach条件与foreach语句中的第一行一起浓缩;它需要那么它可以使用Linq语句的let部分设置你的valInfo变量。

答案 1 :(得分:0)

它只是建议一个linq查询。这并不复杂,但可能值得寻找一个教程。就个人而言,我只是内联valInfo,你可能会发现resharper建议的东西:

likesettings.Values.ForEach(x=> FooMethod(new ValueInfo(x)));

我个人认为这是最简洁但可读的最佳内容。

(可能在语法上不正确,但足够接近)