柚子Nan--回归原点

Everything can be as easy as you like or as complex as you need.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

旧话重提---使用FxCop检测出字符串相关的2个问题

Posted on 2005-03-11 15:32  柚子Nan  阅读(1241)  评论(4)    收藏  举报

1  关于字符串的比较

在印象中,字符串比较的方式很多,至少有下列四种写法

string strA = "koffer", strB = "KoffER" ;

                if(strA.ToUpper() == strB.ToUpper())

                {

                }

                if(strA.ToUpper().Equals(strB.ToUpper()))

                {

                }

                if(string.Equals(strA.ToUpper(),strB.ToUpper()))

                {

                }

                if(string.Compare(strA,strB,true)==0)

                {

}

    使用FxCop检测出来前边三种都违反了一个叫做Avoid Unnecessary String Creation 的规则,另外,据我们的测试,即使是最后一种也违反了一条Specify CultureInfo 的规则,那么完整的写法是加上CultrueInfo 以后的,如下所示:

       if(string.Compare(strA,strB,true,new System.Globalization.CultureInfo("en-US"))==0)

                {

                }

但是,PM建议CultrueInfo的不要去理会,因为CultrueInfo默认读取的系统格式,而且任何短期的项目都不是支持国际化的,当然产品除外(就像SAP)。

 

2、字符串判断为空的方法

印象中看到过的版本也比较多,例如下边4个:

if(strA == null)

                {

                }

if(strA == "")

                {

                }

                if(strA == string.Empty)

                {

                }

                if(strA.Length == 0)

                {

                }

但是完整的可靠的方式是什么呢?根据FxCop的建议,结论如下:

if(strA == null || strA.Length == 0)

                {

                }

具体什么原因就不解释了,比较简单了。