Jeff 隨手記

記下學習的點滴,它日回頭看來就是成長 ~

文章數(139) 回應數(897) 引用數(0)

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

DotBlogs Tags: .Net 效能
2 人收藏 我要推薦 | 閱讀數 : 1823 | Category: .Net隨手記 訂閱

最近在看一些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才會不分大小寫.

  • hatelove 2009/10/19 下午 11:08 回覆

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

    我一直有印象在哪看過比較字串的文章,

    不過找不到了,反倒是找到另一篇以前的文章:

    http://www.vcskicks.com/optimize_csharp_code.html

    裡面有講到string.compare比較好,順便補上來當作參考 :)

  • laneser 2009/10/20 上午 11:25 回覆

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

    是的, 還有 , Dictionary (string key)在 create 的時候也可以給 compare 條件歐, 就不需要建立 dicionary 時 tolower, 然後查詢時又一次 tolower...

  • jeff-yeh 2009/10/20 下午 12:17 回覆

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

    感謝各位的補充^^

標題 *
名稱 *
Email (將不會被顯示)
Url
回應
登入後使用進階評論
Please add 6 and 3 and type the answer here: