如何判断字符串是否为空串?string.length的优越性
来源:互联网 发布:手机淘宝在哪买彩票 编辑:程序博客网 时间:2024/06/03 19:38
本文写作缘起于阮的讨论——《FxCop告诉我,检查一个字符串是否为空要用string.Length。》。其实用过FxCop的人都知道它会建议你使用String.Length属性来判断字符串是否为空串,但你又是否明白其中的缘由呢?今天有点闲,特意写下这篇文章,希望有点帮助。
1. 三种常用的字符串判空串方法:
- Length法:bool isEmpty = (str.Length == 0);
- Empty法:bool isEmpty = (str == String.Empty);
- General法:bool isEmpty = (str == "");
2. 深入内部机制:
- 要探讨这三种方法的内部机制,我们得首先看看.NET是怎样实现的,也就是要看看.NET的源代码!然而,我们哪里找这些源代码呢?我们同样有三种方法:
- Rotor法:一个不错的选择就是微软的Rotor,这是微软的一个源代码共享项目。
- Mono法:另一个不错的选择当然就是真正的开源项目Mono啦!
- Reflector法:最后一个选择就是使用反编译器,不过这种重组的代码不一定就是原貌,只不过是一种“近似值”,你可以考虑使用Reflector这个反编译器[1]。
- 这里我采用Reflector法,我们先来看看一下源代码[2](片段):
public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable, IComparable<string>{ static String() { string.Empty = ""; // Code here } // Code here public static readonly string Empty; public static bool operator ==(string a, string b) { return string.Equals(a, b); } public static bool Equals(string a, string b) { if (a == b) { return true; } if ((a != null) && (b != null)) { return string.EqualsHelper(a, b); } return false; } private static unsafe bool EqualsHelper(string ao, string bo) { // Code here int num1 = ao.Length; if (num1 != bo.Length) { return false; } // Code here } private extern int InternalLength(); public int Length { get { return this.InternalLength(); } } // Code here}
Rotor里面String类的代码与此没什么不同,只是没有EqualsHelper方法,代之以如下的声明:
public extern bool Equals(String value);
进一步分析:
- 首先是Empty法,由于String.Empty是一个静态只读域,只会被创建一次(在静态构造函数中)。但当我们使用Empty法进行判空时,.NET还会依次展开调用以下的方法,而后两个方法内部还会进行对象引用判等!
public static bool operator ==(string a, string b);public static bool Equals(string a, string b);private static unsafe bool EqualsHelper(string ao, string bo);
- 如何判断字符串是否为空串?string.length的优越性
- 如何判断字符串是否为空串
- 如何判断字符串是否为空串?
- 判断字符串String是否为空问题
- 判断字符串String是否为空
- 判断字符串String是否为空问题
- 判断字符串String是否为空问题
- 判断字符串String是否为空问题
- 判断字符串String是否为空问题
- “如何判断字符串String为空?”引出的讨论
- 如何判断字符串是否为空串?[C#]
- 如何判断字符串是否为空串?[C#]
- 如何判断字符串是否为空串?[C#]
- 如何判断字符串是否为空串?[C#]
- 【C#如何判断字符串是否为空串】
- 判断String是否为空的注意事项
- 关于String是否为空的判断
- String判断是否为空的方式
- 五周任务一:设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化
- shell脚本中的几个括号总结(小括号/大括号/花括号)
- IT交流咨询互动
- 程序与生活:为什么要工作?
- parasoft c++Test9.0破解
- 如何判断字符串是否为空串?string.length的优越性
- 在线分析和共享源代码
- 数组类模板
- pycurl 上传文件 提交
- LNK2005
- 找出所缺的整数
- LNK2001
- NSOperation和NSOperationQueue
- 第五周作业(一)