Найти элемент внутри List<T>, предоставив образец экземпляра объекта
Почему есть List<T>.Contains(T)
метод но нет List<T>.Find(T)
метод? Только Find
s, которые поддерживают предикаты, поддерживаются. Если у нас есть существующий экземпляр T, заполненный значением свойства для его идентификатора (но без других свойств), почему мы не можем выполнить поиск, предоставив этот экземпляр объекта для поиска в List
особенно когда мы реализовали IEquatable<T>
за T
и хотел бы использовать то, что там. Но так как мы не можем, мы должны повторить все, что мы сделали в IEquatable
реализация в нашем Find(predicate)
вызов.
3 ответа
Вы можете позвонить IEquatable<T>
член (ы) в вашем Predicate<T>
, Тогда ты не будешь повторяться.
MyClass a = new MyClass(); //sample for finding; IEquatable<MyClass>
List<MyClass> list = GetInstances();
MyClass found = list.Find( mc => mc.Equals(a) );
РЕДАКТИРОВАТЬ:
Я думаю, что понял ваш вопрос сейчас. Вы можете использовать List<T>.IndexOf
Метод для этого:
int index = myList.IndexOf(mySample);
if(index != -1)
{
var item = myList[index];
// Do something with item.
}
Но это было бы довольно странно, потому что ясно, что ваше определение равенства - это не полная картина - это злоупотребление равенством, ИМО.