Как найти индекс элемента в унаследованном классе Collection <T>? - PullRequest
3 голосов
/ 03 марта 2011

Как найти индекс элемента в унаследованном классе Collection?

public class MyCollection : Collection<MyClass>
{
   // implementation here
}

Я пытался использовать .FindIndex для коллекции, но безуспешно:

 int index = collectionInstance.FindIndex(someLambdaExpression);

Есть ли другие способы добиться этого?

Ответы [ 3 ]

7 голосов
/ 03 марта 2011

Если у вас есть элемент напрямую, вы можете использовать IndexOf , чтобы получить его.Однако, это не будет работать для поиска индекса элемента через лямбду.

Вы можете использовать LINQ, однако:

var index = collectionInstance.Select( (item, index) => new {Item = item, Index = index}).First(i => i.Item == SomeCondition()).Index;
1 голос
/ 03 марта 2011

Если возможно (извините, если это не так, и вы ограничены предыдущими вариантами), и если ваш сценарий использования должен работать с индексами, вам было бы лучше использовать общие списки (то есть: Список).

Тогда вы сможете правильно использовать FindIndex.

public class MyList : List<MyClass>
{
    // implementation here
}

...

int index = listInstance.FindIndex(x => x.MyProperty == "ThePropertyValueYouWantToMatch");
1 голос
/ 03 марта 2011

Есть ли причина, по которой звонить по номеру Collection<T>.IndexOf недостаточно?

...