获取一个foreach运行一次
所以问题是这样的,我有一个每个循环,我目前正在使用从XML文件的查询检索数据,然后将其放入一个字符串;像这样:获取一个foreach运行一次
foreach (var value in dateQuery)
date = value.Element("HistoryCreation").Value;
我知道一个事实,即只会在dateQuery一个值(正在使用的XML文件存储值和查询的方式基于)。因此,我想知道(为了让我的程序更高效,并学习如何更好地编写代码),有没有更好的方法来做到这一点,或者是foreach的唯一方法?
你可以使用:
dateQuery.First().Element("HistoryCreation").Value
如果在查询多个项目这不会失败。如果你想,如果有多个项目,它失败,然后用单
date = dateQuery.Single().Element("HistoryCreation").Value;
如果您使用的是.NET 3.5或更新版本,你可以使用扩展方法Enumerable.Single
:
var value = dateQuery.Single();
date = value.Element("HistoryCreation").Value;
那么如果你的假设“会有只有dateQuery中的一个值是错误的,它会抛出异常。
tster:我删除了它 - 很明显他使用的是使用var的3.5。 – 2010-06-29 13:14:02
尝试Enumerable.Single或Enumerable.SingleOrDefault:
date = dateQuery.Single().Element("HistoryCreation").Value;
dateQuery.First().Element("HistoryCreation").Value
,如果你能使用LINQ
该死的,你真的需要快点在这里画! – Pharabus 2010-06-29 13:10:41
我同意,这些答案都是对的;他们来得太快了。 :/ – 2010-06-29 13:34:52
您可以尝试
var theValue = dateQuery.FirstOrDefault();
if (theValue != null)
{
data = theValue.Element("HistoryCreation").Value;
}
else
{
//Deal with the fact that there is no data
}
你可以使用。首先()或.Single() ,但如果dataQuery中没有任何内容会抛出异常。
马克的答案是迄今为止最好的,但我把我的说明foreach循环。
foreach (var value in dateQuery) {
date = value.Element("HistoryCreation").Value;
break; // break current loop
}
应该做的伎俩:
using System.Linq;
dateQuery.Single();
Emmanual,如果你知道你唯一需要做的事情一次,你不应该使用一个循环。
总结:
- 先用(),如果你想的第一个项目,知道至少有一个(或多个)序列中的项目。
- 使用FirstOrDefault()如果序列可以有任意数量的项目
- 使用单()如果序列可以有一个确切的项目
- 使用的SingleOrDefault()如果序列始终具有零个或一个项目
注意,也有其采取断言,这样就可以缩写的这些版本
var result = sequence.Where(predicate).First();
到
var result = sequence.First(predicate);
我不敢相信花了这么长的时间(3分钟)来回答这个问题。 – xcud 2010-06-29 13:19:02
需要一分钟时间才能显示问题。特别是在首页(不是当你点击“问题”时) – tster 2010-06-29 13:25:54