所以问题是这个,我有一个for我正在使用的每个循环从XML文件的查询中检索数据,然后将其放入字符串中;像这样:
foreach (var value in dateQuery)
date = value.Element("HistoryCreation").Value;
我知道一个事实(基于xml文件存储值和使用的查询的方式),dateQuery中只有一个值。
因此,我想知道(为了使我的程序更有效并学习如何更好地编写代码),有没有更好的方法来做到这一点,或者是foreach是唯一的方法?
答案 0 :(得分:18)
您可以使用:
dateQuery.First().Element("HistoryCreation").Value
如果查询中有多个项目,则不会失败。如果您希望在有多个项目时失败,请使用单个
答案 1 :(得分:8)
date = dateQuery.Single().Element("HistoryCreation").Value;
答案 2 :(得分:7)
如果您使用的是.NET 3.5或更高版本,则可以使用扩展方法Enumerable.Single
:
var value = dateQuery.Single();
date = value.Element("HistoryCreation").Value;
然后,如果你的假设'在dateQuery中只有一个值'是错误的,它将抛出异常。
答案 3 :(得分:5)
马克答案是迄今为止最好的答案,但我把我的答案用于说明foreach循环。
foreach (var value in dateQuery) {
date = value.Element("HistoryCreation").Value;
break; // break current loop
}
答案 4 :(得分:4)
Emmanual,如果你知道你只需要做一次,你就不应该使用循环。
答案 5 :(得分:4)
总结:
请注意,还有一些版本采用谓词,因此您可以缩写
var result = sequence.Where(predicate).First();
到
var result = sequence.First(predicate);
答案 6 :(得分:2)
您不能简单地访问dateQuery
的第一个索引吗?
date = dateQuery[0].Element("HistoryCreation").Value;
答案 7 :(得分:2)
尝试Enumerable.Single或Enumerable.SingleOrDefault:
date = dateQuery.Single().Element("HistoryCreation").Value;
答案 8 :(得分:2)
dateQuery.First().Element("HistoryCreation").Value
如果您能够使用LINQ
答案 9 :(得分:2)
你可以尝试
var theValue = dateQuery.FirstOrDefault();
if (theValue != null)
{
data = theValue.Element("HistoryCreation").Value;
}
else
{
//Deal with the fact that there is no data
}
您可以使用.First()或.Single(),但如果dataQuery中没有任何内容,则会抛出异常。
答案 10 :(得分:1)
应该做的诀窍:
using System.Linq;
dateQuery.Single();