gpt4 book ai didi

c# - 我如何告诉 LINQ 忽略不存在的属性?

转载 作者:数据小太阳 更新时间:2023-10-29 02:21:33 27 4
gpt4 key购买 nike

以下代码有效,但前提是 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com