C#:Empty vs Null

说来惭愧前几天才第一次看见String.Empty的写法。顺便找了下,以下是JGTM’2004 [MVP]写的一些总结。blog好久没和技术有过关系了。从现在开始可能会越来越多的写技术相关的blog,开始为技术疯狂吧。

1. 对于两种特殊的引用类型System.String和System.Array,当在方法体内需要返回null值以代表无值返回的时候,强烈建议以String.Empty和长度为0的空数组(如new object[0])返回。

2. 对于调用代码而言,不能默认所有返回System.String或System.Array的方法的返回值都是null(或长度为0),对于两种情况都要判断——除非你调用的都是自己内部的方法,而这些方法又都满足第1条的要求。

另外,从性能角度考虑,当判断一个字串是否为空字串(即String.Empty或””)的时候,不应该写成:

if (s==String.Empty) …

而应该写成:

if (s!=null && s.Length==0) …

原因留给你自己分析一下啦。因此,当判断System.String两种可能返回值(空引用或空字串)的时候,最快且不会出错的标准写法应该是:

if (s==null || s.Length==0)
{
// 处理空引用或空字串情况
}
else
{
// 处理有值字串情况
}

这里面利用了C#编译器的“与或求知捷径算法”(因此当开始对s.Length求值的时候,说明s==nul已经被求值l为false,所以一定有s!=null),所以请确保你使用的语言的编译器激活了对该算法的支持(即:当处理OR求值的时候,遇到第一个true便返回true而不继续求后面的值;当处理AND求值的时候,遇到第一个false便返回false而不继续求后面的值)。

当然了,如果你想单独判断String.Empty的情况时,一定不要忘了在判断s.Length==0之前先判断s!=null噢!

Leave a Reply

Your email address will not be published. Required fields are marked *