Найти элемент внутри списка <T>, предоставив образец экземпляра объекта - PullRequest
2 голосов
/ 15 августа 2011

Почему существует метод List<T>.Contains(T), но нет метода List<T>.Find(T)?Поддерживаются только те Find, которые поддерживают предикаты.Если у нас есть существующий экземпляр T, заполненный значением свойства для его идентификатора (но без других свойств), почему мы не можем выполнить поиск, предоставив этот экземпляр объекта для поиска в List, особенно когда мы реализовали пользовательский IEquatable<T>для T и хотел бы использовать то, что там.Но как бы то ни было, мы не можем, мы должны повторить все, что мы сделали в реализации IEquatable в нашем вызове Find(predicate).

Ответы [ 3 ]

10 голосов
/ 15 августа 2011

Вы можете позвонить 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) );
1 голос
/ 15 августа 2011

EDIT:

Мне кажется, я понял ваш вопрос сейчас. Для этой цели вы можете использовать метод List<T>.IndexOf:

int index = myList.IndexOf(mySample);

if(index != -1)
{
   var item = myList[index];
   // Do something with item.
}

Но это было бы довольно странно, потому что, очевидно, ваше определение равенства - это не полная картина - это злоупотребление равенством, ИМО.

1 голос
/ 15 августа 2011

как насчет этого

list.Any(i => i.ID == searchObj.ID);
...