C# 使用Resharper进行Foreach格式化
在用C语言编写Windows Phone应用程序的代码时,我写了一个基本的foreach语句,然后Resharper用一个自动更正打了我。我完全不理解他所说的话 以下是原始代码:C# 使用Resharper进行Foreach格式化,c#,linq,resharper,C#,Linq,Resharper,在用C语言编写Windows Phone应用程序的代码时,我写了一个基本的foreach语句,然后Resharper用一个自动更正打了我。我完全不理解他所说的话 以下是原始代码: foreach (var val in settings.Values) { var valInfo = new ValueInfo(val.Value); FooMethod(val); } 这是重拾器代码。它告诉我它与Linq有关,但从MSDN中我看不到它与我的代码的关系 foreach (
foreach (var val in settings.Values)
{
var valInfo = new ValueInfo(val.Value);
FooMethod(val);
}
这是重拾器代码。它告诉我它与Linq有关,但从MSDN中我看不到它与我的代码的关系
foreach (var val in from val in settings.Values
let valInfo = new ValueInfo(val.Value)
select val)
{
FooMethod(val);
}
有人能给我解释一下为什么我的语句与Resharper的类似吗?好吧,它只是试图用foreach语句中的第一行来压缩foreach的条件,即let valInfo=new ValueInfoval。Value line正在设置valInfo变量。ReSharper的方式看起来确实很糟糕,所以,嘿,请忽略这个建议,保留你所拥有的 但是,如果你真的感到非常好奇 ReSharper foreach护发素的第一部分与您的相同,即
var val in
然后,如果忽略以let开头的行,则只剩下语句
var val in (from val in settings.Values select val)
为了清楚起见,我添加了括号。这基本上是说从someResultSet的thisColumn中选择thisColumn。如果您熟悉SQL,这将有一定的意义
同样,之所以在设置中添加了from val in settings.Values select val,是为了将foreach的条件与foreach语句中的第一行进行压缩;它需要这样做,以便可以使用Linq语句的let部分设置valInfo变量。它只是建议使用Linq查询。这并不复杂,但可能值得寻找一个教程。就我个人而言,我只是内联valInfo,然后您可能会发现resharper提出了一些建议:
likesettings.Values.ForEach(x=> FooMethod(new ValueInfo(x)));
就我个人而言,我认为简洁易读是最好的方式
语法上可能不正确,但不清楚您对LINQ的理解程度。。。但是我只想从您的第一个语句中完全删除valInfo变量,然后保持其余的不变。请注意,R并不是真的在纠正你——它只是建议一种替代方法。你需要区分R中的提示和建议。这是一个提示。这意味着这样可能更好,这取决于你。在这种特殊情况下,这并不好。