Linq to xml API中 XName 的奇怪实现

简介:

 最近,在使用LinqToXml的时候,使用到其中一个重要的类:XName。它表示一个XML元素/XML属性的“名字”。    System.Xml.Linq中的API,大量使用了这个类,如:

image

    不过还好,我们不用每次都显式的new一个XName类的实例,因为它实现了从string类到它的隐式转换:

public static implicit operator XName(string expandedName);
    这样使得我们在使用的过程中,可以很简单的直接使用linqtoxml的API。如:
XElement person = new XElement("Person");
person.Attribute("Name").Value = "Name";

    同时,由于它也和string类一样,使用了隐式的操作符== 和 !=,所以我们在对它的实例进行判定时,可以使用以下方法:

XName name1 = "name";
XName name2 = "name";
if (name1 == name2)
{
    //do something
}
    当我使用Reflector查看到这个操作符的实现时,它居然是下面这样的!?
image 

    也就是说,它的所有判断相等性,都是使用==操作符,但是这个操作符的实现居然是调用它自己。

    我想,可能是reflector生成的C#有问题,不过查看IL后,也是一样的结果。所以我就写了一个类进行验证:

public class Name
{
    public static bool operator ==(Name left, Name right)
    {
        return (left == right);
    }
    public static bool operator !=(Name left, Name right)
    {
        return !(left == right);
    }

    public static void Test()
    {
        Name name1 = new Name();
        Name name2 = new Name();
        if (name1 == name2)
        {
            //do nothing
        }
    }
}

    结果是:

image

    果然是不能这样写,但是XName为什么可以呢?

目录
相关文章
|
XML Java 应用服务中间件
60dwr - 常见问题(XML 解析错误)
60dwr - 常见问题(XML 解析错误)
40 0
|
XML JavaScript Java
Java Web之JSP操作XML(XML的文档结构 语法和注释、dom4j的下载与配置 应用dom4j创建、解析和修改XML)
Java Web之JSP操作XML(XML的文档结构 语法和注释、dom4j的下载与配置 应用dom4j创建、解析和修改XML)
260 0
Java Web之JSP操作XML(XML的文档结构 语法和注释、dom4j的下载与配置 应用dom4j创建、解析和修改XML)
|
XML 存储 数据格式
Open Office XML 格式中的 Style 设计原理
Open Office XML 格式中的 Style 设计原理
129 0
Open Office XML 格式中的 Style 设计原理
|
XML Web App开发 JavaScript
使用JavaScript调用Microsoft XMLDOM库进行XML字符串的解析
使用JavaScript调用Microsoft XMLDOM库进行XML字符串的解析
155 0
使用JavaScript调用Microsoft XMLDOM库进行XML字符串的解析
|
XML JavaScript 数据格式
使用ABAP操作XML DOM时,如何利用filter功能
使用ABAP操作XML DOM时,如何利用filter功能
156 0
C#动态创建Xml-LinQ方式
C#创建Xml-LinQ方式 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— ...
1148 0
|
Web App开发 XML JSON
[RESTful web services读书笔记] 接口设计中维持XML和JSON表述的兼容性
分布式的客户端/服务器环境中必然涉及到变更管理,如何维护系统的可扩展性和兼容性? 问题描述:需求是持续变化的,在通常的接口设计中,如何保证服务端XML和JSON表述的变更与现有的客户端保持兼容 解决方案:保持原有的XMl和JSON数据分层结构整体不发生变化,确保客户端按照之前的调用方法可以继续工作 服务端需要把新增的数据元素设计为可选的,以此保持与客户端的兼容性,相对于URI来说,就是URI中添加了新参数时,要继续服务于现有参数,并将新参数视为可选 不要修改删除原有的响应正文表述的数据域  PS: REST架构风格的最主要驱动是分布性和扩展性。
1215 0
|
Web App开发 XML 测试技术

相关课程

更多