【发布时间】:2013-08-06 15:58:22
【问题描述】:
所以我是第一次深入研究 Linq to XML(我知道,我落后于时代),到目前为止它非常酷。但是,我遇到了这种非常令人困惑的行为。
我正在解析常见的.resx 格式。在其中,您有data 标签,其中包含value 和可选的comment。这是我一开始尝试的代码:
var items = from str in doc.Root.Descendants("data")
select new ResourceValue
{
Name = str.Attribute("name").Value,
Value = str.Element("value").Value,
Comment=str.Element("comment").Value
};
当然,虽然我得到comment 元素的.value,但它会引发空引用异常。好吧,让我们再试一次。我听说您可以将 XElement 转换为字符串,它会神奇地工作。让我们试试吧
var items = from str in doc.Root.Descendants("data")
select new ResourceValue
{
Name = str.Attribute("name").Value,
Value = str.Element("value").Value,
Comment=str.Element("comment") as string
};
哦哦。这次我得到一个编译器错误。
无法通过 a 将类型 'System.Xml.Linq.XElement' 转换为 'string' 引用转换、装箱转换、拆箱转换、换行 转换,或空类型转换
嗯,这很奇怪.. 让我们搜索 stackoverflow。瞧,我找到了一个提示这个的 sn-p:
var items = from str in doc.Root.Descendants("data")
select new ResourceValue
{
Name = str.Attribute("name").Value,
Value = str.Element("value").Value,
Comment=(string)str.Element("comment")
};
哇哦。这样可行!?但是,将null 转换为字符串会引发空引用异常......不是吗?我认为as string 正是适合这种情况!?
这是如何工作的,为什么我可以进行显式转换,但不能进行显式 as 转换?
【问题讨论】:
标签: c# xml linq linq-to-xml