我有一个模特课
public class Item
{
public string Name {get; set;}
public string Desc {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我会查询我的XML文档
List<Item> item = xmlDoc.Descendants()
.Select(o => new Item {
Name = o.Attribute("name").Value,
Desc = o.Attribute("desc").Value
}).ToList();
Run Code Online (Sandbox Code Playgroud)
但是,对于每个项目,属性desc可能存在也可能不存在.如果属性desc存在,则上述LINQ有效,但如果不存在则会导致异常.
如果它不存在,我希望LINQ查询只将null赋给新Item对象中的Desc字段.谢谢你的任何建议.
正确的方法是使用转换运算符:
Name = (string) o.Attribute("name"),
Desc = (string) o.Attribute("desc")
Run Code Online (Sandbox Code Playgroud)
为什么这是首选方式?首先,它很容易; 其次,它适用于其他类型:
Count = (int?) o.Attribute("count"),
When = (DateTime?) o.Attribute("when")
Run Code Online (Sandbox Code Playgroud)
特别是,这些也为每种数据类型应用了正确的xml编码规则,而不是使用特定于文化的DateTime.Parse/ int.Parse等等.许多微妙的事情都不想记住!
请注意,如果要断言属性存在,则非Nullable<T>版本也可以工作:
Size = (int) o.Attribute("size"),
Created = (DateTime) o.Attribute("created")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |