在使用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的陈述相似吗?
答案 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)));
我个人认为这是最简洁但可读的最佳内容。
(可能在语法上不正确,但足够接近)