gpt4 book ai didi

linq - 如何检查 LinqToXML 表达式中的空属性?

转载 作者:行者123 更新时间:2023-12-01 23:25:34 24 4
gpt4 key购买 nike

我有一个 LinqToXML 表达式,我试图根据相似的属性选择不同的名称。代码运行良好,我将其放在下面:

            var q = xmlDoc.Element("AscentCaptureSetup").Element("FieldTypes")
.Descendants("FieldType")
.Select(c => new { width = c.Attribute("Width").Value,
script = c.Attribute("ScriptName").Value,
sqlType = c.Attribute("SqlType").Value,
enableValues = c.Attribute("EnableValues").Value,
scale = c.Attribute("Scale").Value,
forceMatch = c.Attribute("ForceMatch").Value,
forceMatchCaseSensitive = c.Attribute("ForceMatchCaseSensitive").Value,
sortAlphabetically = c.Attribute("SortAlphabetically").Value,
})
.Distinct();

出现此问题是因为并非所有属性都是必需的,如果省略其中一个属性,例如 sortAlphabetically,我将收到“未引用对象”错误。有道理,但是否有一种方法可以将查询更改为仅在属性实际存在时才使用分配新值? (从而绕过任何空指针错误)

最佳答案

而不是使用 Value属性(这将在空引用上爆炸),只需转换 XAttribute到字符串 - 如果 XAttribute,您将或者得到值,或者一个空引用引用为空。 (XElement 的工作方式相同,这适用于所有到可空类型的转换。)

所以你会:

.Select(c => new { 
width = (string) c.Attribute("Width"),
script = (string) c.Attribute("ScriptName"),
sqlType = (string) c.Attribute("SqlType"),
enableValues = (string) c.Attribute("EnableValues"),
scale = (string) c.Attribute("Scale"),
forceMatch = (string) c.Attribute("ForceMatch"),
forceMatchCaseSensitive = (string) c.Attribute("ForceMatchCaseSensitive"),
sortAlphabetically = (string) c.Attribute("SortAlphabetically"),
})

其中一些属性听起来实际上应该转换为 int?bool? , 请注意...

关于linq - 如何检查 LinqToXML 表达式中的空属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984961/

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