我正在编写一个简单的LINQ to XML查询.通常,XML文档中的某些节点可能缺少某些元素.为了解决这个问题,我试图使用可靠类型和Scott Guthrie提出的合并运算符.我注意到的Whan效果是,在转换为(int?)时,将元素转换为(string?)dit不起作用.一个例子:
var modules = from module in XMLConfig.Descendants("module")
select new MyApp.Modules.Manager
{
ManagerUrl = (string?)module.Element("Manager") ?? "http://localhost/default.asmx",
ManagerType = (int?) module.Element("ManagerType") ?? 1,
ManagerNumber = (int?) module.Element("ManagerNumber") ?? 1,
PrinterNr = (int?) module.Element("PrinterNr") ?? 1,
TextNr = (int?) module.Element("TextNr") ?? 100,
Name = module.Element("Name").Value
};
Run Code Online (Sandbox Code Playgroud)
这给了我编译错误:
无法转换类型'字符串?' '串'
但是,在转换为(int?)时没有任何抱怨.如果有人能解释这种行为的原因(?)我真的很感激.
字符串是引用类型,即它已经是"可空的".没有必要将它包装在Nullable <T>中,因为值类型是不可能的null.
这有效:
ManagerUrl = (string)module.Element("Manager") ?? "http://localhost/default.asmx"
Run Code Online (Sandbox Code Playgroud)
(string)module.Element("Manager") 如果Manager元素不存在则返回null,否则返回元素的内容.
(int)module.Element("ManagerType")如果ManagerType元素不存在则会抛出异常,因为a int不能为null(值类型).
(int?)module.Element("ManagerType")如果缺少ManagerType元素,则不会抛出异常,因为a int?可以为null(可空类型).
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |