快速业务通道

LINQ学习笔记:string类型的Value属性

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-13

与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的显式转换可以将其转换为以下的类型:

  • 所有的数值类型
  • string, bool, DateTime, DateTimeOffset, TimeSpan与Guid
  • 上述所有类型的Nullable<>版本

如果请求的名称不存在的时候, 转换到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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号