在使用字符串/列表时,为什么要使用.Contains而不是.IndexOf? 大多数使用.Contains的代码很快就需要该项的索引,因此必须执行两个语句。但为什么不把两者合并呢?
if ((index = blah.IndexOf(something) >= 0)
// i know that Contains is true and i also have the index
您说得没错,IndexOf
比Contains
更为通用。但是,Contains
仍然非常有用,因为它明确地表示了操作。
if(blah.IndexOf(something) >=0)
{
}
作为一个操作,它并不像显而易见
if(blah.Contains(something))
{
}
如果你需要索引,那么你应该使用IndexOf
操作;如果你只需要知道字符串是否包含子字符串,则使用Contains
。
用它被创建出来的工具。
使用Contains的一个原因是它有一个重载,允许您指定一个IEqualityComparer<String>
(如果您希望比较不区分大小写或其他情况)。IndexOf没有这样的重载。
它们是为不同目的而设计的不同函数,但您可以使用IndexOf来模拟Contains。
为什么要使用Contains?在Linq中,特别是当转换为SQL时,它会被转换成相对简单的SQL语句,而IndexOf更难以翻译。