2011-02-25 318 views
0

`那裏client.name.ToLower()。包含(name.ToLower())誰能解釋下面的代碼,請

+0

看起來它總是會返回「true」。 「client」和「client.name」的數據類型是什麼? – mellamokb 2011-02-25 17:12:54

+1

字符串變量如何具有字符串成員 – 2011-02-25 17:18:49

+1

似乎很奇怪。除非客戶端對象實現了ToLower方法。 – xanatos 2011-02-25 17:20:56

回答

3

現在更清楚了。這是client.namename(忽略不計)不區分大小寫的搜索。如果name包含在client.name中,則爲True。因爲使用國際信件(顯然「國際信件」不存在,我的意思是來自不同於你自己的文化的信件,典型的例子是土耳其文化,閱讀:http://www.i18nguy.com/unicode/turkish-i18n.html,部分標題爲Turkish Has An Important Difference),你可以打破它。 「正確」的方式是:client.name.IndexOf(name, StringComparison.CurrentCultureIgnoreCase) != -1。您可以使用StringComparison.InvariantCultureIgnoreCase而不是StringComparison.CurrentCultureIgnoreCase。如果你不得不使用像ToLower這樣的技巧,有人建議比較兩邊比ToUpper更好(但使用StringComparison.*更好)

+0

這很有趣 – 2011-02-26 00:38:48

1

貌似LINQ給我。

我不是真的了最新的.NET的這些天,但我讀了作爲尋找client對象,它們的name屬性是不區分大小寫的匹配與client變量的ToString性能,同時,允許在之前或之後添加其他字符,就像SQL中的WHERE foo is like '%:some_value%'一樣。如果我是對的,btw,client在這個例子中是一個可怕的變量名。

1

這是一段奇怪的代碼。瞭解更多關於客戶端對象的知識將是一件好事。本質上,它檢查客戶端對象上的不區分大小寫的名稱值是否包含客戶端對象的不區分大小寫的值(作爲字符串)。所以如果客戶端名稱本質上包含類本身的字符串名稱。

1

.ToLower()返回所有以小寫字母命名的字符串。基本上,如果name.ToLower()嵌入client.name.ToLower()中的任何位置,則此語句返回true。

//If:<br/> 
client.name = "nick, bob, jason"; 
name = "nick"; 
//Then:<br/> 
client.name.ToLower().Contains(name.ToLower()); 
//would return true