原子化 XName 和 XNamespace 对象 (LINQ to XML)
来源:互联网 发布:java cms 开源 编辑:程序博客网 时间:2024/06/01 08:05
Visual Studio 2010
其他版本
- Visual Studio 2008
XName 和XNamespace 对象是原子化的;即,如果这两个对象包含相同的限定名,则它们将引用同一个对象。这将提高查询性能:当比较两个原子化名称是否相等时,基础中间语言只需确定这两个引用是否指向同一个对象。基础代码不必进行很耗费时间的字符串比较。
原子化语义
原子化是指如果两个 XName 对象具有相同的本地名称并且位于同一个命名空间中,则它们共享相同的实例。同样,如果两个 XNamespace 对象具有相同的命名空间 URI,则它们共享同一个实例。
对于启用原子化对象的类,该类的构造函数必须是私有的,而不是公共的。 这是因为如果构造函数是公共的,则您可以创建非原子化对象。 XName 和XNamespace 类实现一个隐式转换运算符,以将字符串转换为XName 或XNamespace。这是获取这些对象的实例的方式。 不能通过使用构造函数来获得实例,因为构造函数是不可访问的。
XName 和XNamespace 还实现相等运算符和不相等运算符,以确定进行比较的两个对象是否引用相同的实例。
示例
下面的代码创建一些 XElement 对象,并演示相同的名称共享同一个实例。
C#
复制
XElement r1 = new XElement("Root", "data1");XElement r2 = XElement.Parse("<Root>data2</Root>");if ((object)r1.Name == (object)r2.Name) Console.WriteLine("r1 and r2 have names that refer to the same instance.");else Console.WriteLine("Different");XName n = "Root";if ((object)n == (object)r1.Name) Console.WriteLine("The name of r1 and the name in 'n' refer to the same instance.");else Console.WriteLine("Different");
此示例产生以下输出:
复制
r1 and r2 have names that refer to the same instance.The name of r1 and the name in 'n' refer to the same instance.
如前面所述,原子化对象的好处是:当使用某个采用 XName 作为参数的轴方法时,该轴方法只需确定这两个名称引用同一个实例来选择所需的元素。
下面的示例将 XName 传递给Descendants 方法调用,该调用会由于使用原子化模式而获得更好的性能。
C#
复制
XElement root = new XElement("Root", new XElement("C1", 1), new XElement("Z1", new XElement("C1", 2), new XElement("C1", 1) ));var query = from e in root.Descendants("C1") where (int)e == 1 select e;foreach (var z in query) Console.WriteLine(z);
此示例产生以下输出:
复制
<C1>1</C1><C1>1</C1>
- 原子化 XName 和 XNamespace 对象 (LINQ to XML)
- LINQ to XML 之 XNamespace
- Linq To XML 和 序列化XML
- 序列化和LINQ to XML处理XML
- [代码]创建XDocument对象(LINQ to XML)
- Winform中的linq to XML和listview
- Linq To XML把对象数组写入xml
- 使用LINQ to XML
- LINQ TO XML
- LINQ TO XML学习
- linq to xml demo
- LINQ to XML简介
- LINQ to XML
- linq to xml入门
- LINQ to XML
- LINQ TO Xml【转载】
- LINQ to XML
- LINQ TO XML
- LOBSEGMENT
- 【well】完全理解关键字this
- 判断QQ的在线状态
- Java用尾递归遍历目录
- Silktest 2011 操作 excel初探
- 原子化 XName 和 XNamespace 对象 (LINQ to XML)
- J2EE中EL和JSTL结合运用
- Java实例对象占用内存
- uva 10004 - Bicoloring
- jasperReport+struts2+jatoolsPrinter打印
- 【java】位、字节、汉字、字符的关系
- Ansi、Unicode、UTF8字符串之间的转换和写入文本文件
- 学C/C++的同学们,有福了!
- To M, for lighting up my soul