等式比较器`FindIndex` vs`IndexOf`

时间:2016-07-05 17:31:30

标签: c#

我有这行代码:

HttpURLConnection

现在我知道List.FindIndex Method

  

搜索与a定义的条件匹配的元素   指定谓词,并返回第一个从零开始的索引   列表中的一部分或其中的一部分。

我想知道,某个班级的所有物品都有相同的尺寸吗?

如果是,并且由于使用int MyIndex = MyListOfCustomObjects.IndexOf(CandidateObject); // assume CandidateObject exists in the list 没有指定的谓词,那么条件应该匹配 in在IndexOf内找到CandidateObject的订单?

此外,“ ..或其中的一部分。”是什么意思?

2 个答案:

答案 0 :(得分:2)

  

然后应该匹配哪些条件才能在CandidateObject中找到MyListOfCustomObjects

documentation间接回答:

  

此方法使用T的默认相等比较器EqualityComparer<T>.Default确定相等性,Equals(T)是列表中值的类型。

如果您点击EqualityComparer<T>.Default的链接,您会发现它调用为该类定义的通用Equals(object)方法(如果存在)或非通用{{ 1}}重载。如果T未实现/覆盖任何一种方法,则默认情况下会使用引用相等,因为object.Equals(object)的定义方式如何。

斯科特回答了你关于&#34; ..或其中一部分的问题。&#34;完美的,我不确定你的意思是什么&#34;相同的大小&#34;或者它与平等有什么关系。如果这是您要求的内容,则无法保证同一类的两个对象具有相同的内存占用量。

答案 1 :(得分:1)

所有项目只占用1个索引位置,因此您可以将它们视为“具有相同的大小”。

IndexOf没有你可以定义的谓词,但它仍然遵循一个。您可以将IndexOf视为

public int IndexOf(T item)
{
    return this.FindIndex(x => item.Equals(x));
}
public int IndexOf(T item, int startIndex)
{
    return this.FindIndex(startIndex, x => item.Equals(x));
}
public int IndexOf(T item, int startIndex,int count)
{
    return this.FindIndex(startIndex, count, x => item.Equals(x));
}

“或它的一部分”部分用于当您使用startIndex中的重载时,这允许您从提供的索引开始中途搜索,而不是从0开始例如,如果你想找到第二项,你会找到第一项的索引,然后在结果+ 1上再次调用find来查找第二项索引。