以下代码有效,但前提是 XML 的每个元素都具有“Id”属性。
但是,如果元素没有 id 属性,LINQ 会抛出 NullReferenceException。
如何指定如果没有 Id 属性,则只分配一个 null 或空白?
using System;
using System.Linq;
using System.Xml.Linq;
namespace TestXmlElement2834
{
class Program
{
static void Main(string[] args)
{
XElement content = new XElement("content",
new XElement("item", new XAttribute("id", "4")),
new XElement("item", new XAttribute("idCode", "firstForm"))
);
var contentItems = from contentItem in content.Descendants("item")
select new ContentItem
{
Id = contentItem.Attribute("id").Value
};
foreach (var contentItem in contentItems)
{
Console.WriteLine(contentItem.Id);
}
Console.ReadLine();
}
}
class ContentItem
{
public string Id { get; set; }
public string IdCode { get; set; }
}
}
最佳答案
(第二次编辑)
哦 - 找到了一个更简单的方法;-p
from contentItem in content.Descendants("item")
select new ContentItem
{
Id = (string)contentItem.Attribute("id")
};
这要归功于 XAttribute
等灵活的静态转换运算符。
(原创)
from contentItem in content.Descendants("item")
let idAttrib = contentItem.Attribute("id")
select new ContentItem
{
Id = idAttrib == null ? "" : idAttrib.Value
};
(第一次编辑)
或者添加一个扩展方法:
static string AttributeValue(this XElement element, XName name)
{
var attrib = element.Attribute(name);
return attrib == null ? null : attrib.Value;
}
并使用:
from contentItem in content.Descendants("item")
select new ContentItem
{
Id = contentItem.AttributeValue("id")
};
关于c# - 我如何告诉 LINQ 忽略不存在的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/950210/