CSh*_*ned 24 c# linq resharper for-loop
在Visual Studio中,Re-Sharper继续推荐我将for循环转换为linq表达式,但是这是什么原因?
哪个更快?
以下是一些示例循环,其中resharper建议使用linq转换:
foreach (XmlNode legendEntryNode in _legendEntryNodes)
{
var xmlElement = legendEntryNode["FeatureType"];
if (xmlElement == null || !xmlElement.InnerText.Equals(featuretype)) continue;
var xmlNodeList = legendEntryNode.SelectNodes("Themes/Theme");
if (xmlNodeList != null)
foreach (XmlNode themeNode in xmlNodeList)
{
var element = themeNode["Value"];
if (element == null || !element.InnerText.Equals(v)) continue;
var xmlElement1 = themeNode["Icon"];
if (xmlElement1 != null)
{
string iconname = "<ms:ICON>" + xmlElement1.InnerText + "</ms:ICON>";
var element1 = themeNode["Highlight"];
if (element1 != null)
{
string highlightname = "<ms:HIGHLIGHT>" + element1.InnerText + "</ms:HIGHLIGHT>";
gml = gml.Insert(c, iconname + highlightname);
c += (iconname.Length + highlightname.Length);
}
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这个更简单的例子:
for (int i = 0; i < getPointsRequest.Attribs.Length; i++)
{
string attribName = getPointsRequest.Attribs[i].AttributeName;
if (!String.IsNullOrEmpty(attribName))
{
sqlQuery += "<ms:" + attribName + ">||\"" + attribName + "\"||</ms:" + attribName + ">";
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 36
速度通常与代码的大部分无关 - 您应该以最简单的方式编写代码,然后对其进行测量以确保其足够快.
如果你的for循环真的只是查询,那么LINQ 绝对是一个结束更可读代码的好方法.它不是普遍适用的,但是你应该至少经常记住它.
通常,for循环可以转换为懒惰地计算的查询,然后是foreach循环,它对查询返回的每个值执行一些操作.这可以帮助区分这两个方面,让您在阅读代码时一次关注一个方面.将LINQ查询保留为查询非常重要,而不是在其中使用副作用 - 它的设计目的是提供一种功能性方法,它实际上不会与副作用混合得很好.
如果你有一些具体的例子,我们可以提供更多关于转换为使用LINQ哪些循环有意义的意见,哪些不会.
Ama*_*ure 16
没有性能提升,但有一些好处
有关详细信息,请参阅:
希望这对你有所帮助.
一般来说,ReSharper 的建议只是建议,没有警告。因此,您只能决定采用哪种方式:LINQ 还是 foreach。
我对建议“使用'var'”有同样的问题。仅当我认为读者可以更好地阅读该声明时,我才会点击该建议。
可读性是我编写代码时最优先考虑的事情之一。