不分英文字母大小寫的字串比較方式

最近在看一些MSDN上的文章,看到一篇我"常犯"的錯,就是文字字串如果要不分大小寫去比對,我都是先ToLower()或是ToUpper()之後再去比,但看完這篇後,才知道我錯了.

最近在看一些MSDN上的文章,看到一篇我"常犯"的錯,就是文字字串如果要不分大小寫去比對,我都是先ToLower()或是ToUpper()之後再去比,但看完這篇後,才知道我錯了.

 

這個例子是在下面這個的情況 :


string a="AAA";
string b="aaa";
bool c=a.ToUpper()==b.ToUpper();

 

很習慣性的寫法,在MSDN裡說明了這個用法並不建議使用,因為在ToUpper()或是ToLower(),還是會將轉換後的字串暫存起來,再去做比對的動作,所以這種做法並不建議,如果要比對,最好是用string.Compare(a,b,true).

所以這段code就會改為如下 :


string a="AAA";
string b="aaa";
bool c=string.Compare(a,b,true)==0;

 

寫了一段Sample去比較了一下這兩種的效能差異,差不多後者快了前者五倍以上,但如果只是要做a==b,不做Upper/Lower,直接用前者就好了.

 

參考 :

MSDN string.Compare

Chapter 5 — Improving Managed Code Performance 這篇的範例是Compare(a,b,false),這是錯的,第三個參數需為true才會不分大小寫.