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查看到这个操作符的实现时,它居然是下面这样的!?
 

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

    我想,可能是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为什么可以呢?

目录
相关文章
|
12月前
|
XML 存储 数据格式
Open Office XML 格式中的 Style 设计原理
Open Office XML 格式中的 Style 设计原理
|
4月前
|
XML 存储 开发工具
什么是 Microsoft Open XML 标准
什么是 Microsoft Open XML 标准
|
XML Java 数据格式
编写Java程序,使用 dom4j 创建一个 XML 文档,文档名为“city.xml”。注意该文档的格式和数据
编写Java程序,使用 dom4j 创建一个 XML 文档,文档名为“city.xml”。注意该文档的格式和数据
246 0
编写Java程序,使用 dom4j 创建一个 XML 文档,文档名为“city.xml”。注意该文档的格式和数据
C#动态创建Xml-LinQ方式
C#创建Xml-LinQ方式 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— ...
1143 0
|
Web App开发 XML JSON
[RESTful web services读书笔记] 接口设计中维持XML和JSON表述的兼容性
分布式的客户端/服务器环境中必然涉及到变更管理,如何维护系统的可扩展性和兼容性? 问题描述:需求是持续变化的,在通常的接口设计中,如何保证服务端XML和JSON表述的变更与现有的客户端保持兼容 解决方案:保持原有的XMl和JSON数据分层结构整体不发生变化,确保客户端按照之前的调用方法可以继续工作 服务端需要把新增的数据元素设计为可选的,以此保持与客户端的兼容性,相对于URI来说,就是URI中添加了新参数时,要继续服务于现有参数,并将新参数视为可选 不要修改删除原有的响应正文表述的数据域  PS: REST架构风格的最主要驱动是分布性和扩展性。
1207 0
|
Web App开发 XML 测试技术
|
XML JavaScript 数据格式
kbmmw 中XML 操作入门
delphi 很早以前就自带了xml 的操作,最新版里面有三种XML 解释器,一种是MSXML,看名字就知道 这个是微软自带的,这个据delphi 官方称是速度是最快的,但是只能在windows 上使用。
1019 0