【发布时间】:2012-03-05 16:07:44
【问题描述】:
在 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;
}
}
还有这个更简单的例子:
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 + ">";
}
}
【问题讨论】:
-
您可能想向我们展示一个示例循环。
-
只是一件小事,我知道这些是示例,但您可能希望将字符串连接更改为
string.Format,因此简单示例变为:sqlQuery += string.Format("<ms:{0}>||\"{0}\"||</ms:{0}>", attribName);,更易于阅读。 Resharper 可以轻松更改它们,因为它是它的重构选项之一。 -
(顺便说一句,代码格式的反引号在问题标题中不起作用,很遗憾)
-
您可能还想使用 StringBuilder 而不是“sqlQuery +=”字符串连接。
标签: c# linq for-loop resharper