Linq to xml API中 XName 的奇怪实现
时间:2022-04-24
本文章向大家介绍Linq to xml API中 XName 的奇怪实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近,在使用LinqToXml的时候,使用到其中一个重要的类:XName。它表示一个XML元素/XML属性的“名字”。 System.Xml.Linq中的API,大量使用了这个类,如:
不过还好,我们不用每次都显式的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
}
}
}
结果是:
果然是不能这样写,但是XName为什么可以呢?
- Go语言常用字符串处理方法实例汇总
- 硬盘故障时如何强制关机:Input/output error
- 举例讲解Go语言中函数的闭包使用
- 实现WordPress提交评论的时删除该页面的WP-Super-Cache缓存的方法
- php自动生成百度开放适配PC页-手机页pattern对应关系sitemap.xml
- Linux系统最大文件打开数优化,解决Too many open files报错
- 【Dev Club 分享】安卓单元测试:What, Why and How
- WordPress记住评论用户信息的js版本,直接操作cookie无视缓存
- 禁止百度转码和百度快照缓存的META声明
- 单机MySQL数据库优化推荐的编译安装参数
- Linux网络实时流量监测工具iftop的安装使用
- Golang学习--GroupCache的使用
- 基于 Webpack & Vue & Vue-Router 的 SPA 初体验
- GO语言高并发学习心得体会例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- @RequestMapping与@RequestParam注解
- SpringMVC简介与工程配置
- KVM管理虚拟机
- fpga实现YCbCr444转RGB
- UML类图自动生成,太爽了
- Python爬虫之mongodb介绍和安装
- 一句话说清楚 CountDownLatch 和 CyclicBarrier 的区别
- Android 功耗(8)---如何找到阻止进入deep idle SODI的元凶
- 【技术创作101训练营】三种不同场景下 vue 组件动态加载的方法及实现
- leetcode链表之回文链表
- 如何理解 Go 中的反射
- Synchronized深入分析
- Spring的一些零碎知识点整理
- CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统
- 建议收藏 哭着喊着 从C语言转向C++刷算法