我有一个模型类
public class Item
{
public string Name {get; set;}
public string Desc {get; set;}
}
我会查询我的XML文档
List<Item> item = xmlDoc.Descendants()
.Select(o => new Item {
Name = o.Attribute("name").Value,
Desc = o.Attribute("desc").Value
}).ToList();
但是,每个项目可能存在或不存在属性 desc 。如果属性 desc 存在,则上述LINQ有效,但如果不存在则会导致异常。
如果它不存在,我希望LINQ查询只将 null 分配给新 Item 对象中的 Desc 字段。感谢您的任何建议。
答案 0 :(得分:5)
执行此操作的正确方法是使用转换运算符:
Name = (string) o.Attribute("name"),
Desc = (string) o.Attribute("desc")
为什么这是首选方式?首先,它很容易;其次,它适用于其他类型:
Count = (int?) o.Attribute("count"),
When = (DateTime?) o.Attribute("when")
特别是,这些也为每种数据类型应用了正确的xml编码规则,而不是使用特定于文化的DateTime.Parse
/ int.Parse
等等。许多微妙的事情都不想记住!< / p>
请注意,如果您想声明该属性存在,那么非Nullable<T>
版本也可以使用:
Size = (int) o.Attribute("size"),
Created = (DateTime) o.Attribute("created")
答案 1 :(得分:1)
您可以使用三元运算符 - ?:
List<Item> item = xmlDoc.Descendants()
.Select(o => new Item {
Name = o.Attribute("name") != null ? o.Attribute("name").Value : null,
Desc = o.Attribute("desc") != null ? o.Attribute("desc").Value : null,
}).ToList();