LINQ学习笔记:string类型的Value属性
与Value打交道 XElement与XAttribute的都有一个string类型的Value属性. 如果一个元素包含有一个单一的XText子节点, 那么XElement的Value属性就相当于访问此节点内容的快捷方式. 对于XAttribute, Value属性就是指attribute的值. 尽管存储体不一样, X-DOM还是提供了一致的操作方式用于元素和attribute的值. 设置Values 有两中方式用于分配一个值: 调用SetValue或者赋值给Value属性. 相比之下SetValue更加灵活一点, 因为它不仅仅接受string类型, 也可以接受其他的简单类型: 1: var e = new XElement ("date", DateTime.Now); 2: e.SetValue (DateTime.Now.AddDays(1));
3: Console.Write (e.Value);
我们可以简单的设置值到元素的Value属性, 但这意味着你需要手动将DateTime转换成string类型. 这将会更加复杂–因为它需要使用XmlConvert来转换成为一个XML兼容的结果. 获取Values 为了将一个Value值转换成为其基础类型, 我们可以简单转换XElement或者XAttribute到我们期望的类型. 这听起来似乎是不能工作的, 但实际上是它完全没有任何问题. 例如: 1: XElement e = new XElement ("now", DateTime.Now); 2: DateTime dt = (DateTime) e;
3:
4: XAttribute a = new XAttribute ("resolution", 1.234); 5: double res = (double) a; 一个元素或者attribute并不会天然的存储DateTime或者数字–他们总是将其保存为文本, 然后转换为真正需要的. 它也没有记住其原始类型, 因为你必须要将其转换为正确的类型以避免出现运行时错误.要让你的代码更加健壮, 可以使用try / catch块, 捕获一个FormatException. XElement与XAttribute的显式转换可以将其转换为以下的类型:
如果请求的名称不存在的时候, 转换到nullable类型在对于连带着Element和Attribute的方法是非常有用的, 其转换应该可以顺利完成. 例如, 如果x没有timeout元素, 第一行将会引起一个运行时错误, 而第二行则不会: 1: int timeout = (int) x.Element ("timeout"); // 错误 2: int? timeout = (int?) x.Element ("timeout"); // OK 我们可以使用??操作符来去除最后结果中的nullable类型. 以下的代码在resolution属性不存在的情况下将会返回1.0 1: double resolution = 2: (double?) x.Attribute ("resolution") ?? 1.0; |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |