Linq to XML:如何判断“var”类型是空还是空?

时间:2009-12-09 18:59:23

标签: c# xml linq linq-to-xml

所以,我有一小块尖刺的尖头xml看起来像这样:

<Groups UseGroup='True'>
     <Group>1264,182,1979</Group>
</Groups>

我有一小块linq可以从中获得价值:

var group = from a in xml.Descendants("Groups")
         select a.Element("Group").Value;

一切都很好,但是我不知道如何处理空响应?如果我使用:

if(group != null)

它总是会评估true,因为那里有一些东西。如果我使用:

if(group.ToString() == "")

它将始终评估为true,因为调用该对象的ToString()返回System.Linq.Enumerable + WhereSelectEnumerableIterator`2 [System.Xml.Linq.XElement,System.String]出于某种原因,我很难过将我的结果从我的linq查询转换为字符串,所以我使用var,因为这似乎是我能让它工作的唯一方法...

所以问题是,我使用正确的linq语法,如果是这样,我怎么判断它是否返回了什么?

1 个答案:

答案 0 :(得分:2)

我不确定埃里克为什么把他的答案作为评论发布,但他是对的。您的条件语句应为:

if (group.Any())

如果您的XML没有“Groups”标签,那么Any()将评估为false。

您可以将group视为查询所有匹配项的序列。在你的例子中,只有一个匹配,但这只是意味着它只是一个只有一个值的IEnumerable。要获得该值,您可以:

string groupVal = group.FirstOrDefault();

这将返回第一个匹配,如果没有匹配则返回空字符串。如果您希望只有一个结果,则可以使用Single(),如果结果为零或多,则需要抛出异常。还有First()SingleOrDefault()方法,其行为与您预期的一样。