2011-02-25 80 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