Проверка того, содержит ли список объектов свойство с определенным значением
Скажем, у меня есть следующий код:
class SampleClass
{
public int Id {get; set;}
public int Name {get; set;}
}
List<SampleClass> myList = new List<SampleClass>();
//list is filled with objects
...
string nameToExtract = "test";
Итак, мой вопрос заключается в том, какую функцию List можно использовать для извлечения из myList
только объектов, у которых есть свойство Name, которое соответствует моей строке nameToExtract
.
Я заранее извиняюсь, если этот вопрос действительно прост/очевиден.
Ответы
Ответ 1
Вы можете использовать Enumerable.Where метод расширения:
var matches = myList.Where(p => p.Name == nameToExtract);
Возвращает IEnumerable<SampleClass>
. Предполагая, что вы хотите отфильтровать List
, просто вызовите .ToList()
по указанному выше.
Кстати, если бы я писал код выше сегодня, я бы делал проверку равенства по-разному, учитывая сложности обработки строк в Юникоде:
var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture));
См. также
Ответ 2
myList.Where(item=>item.Name == nameToExtract)
Ответ 3
using System.Linq;
list.Where(x=> x.Name == nameToExtract);
Изменить: неверный вопрос (теперь все совпадения)
Ответ 4
В дополнение к другим ответам, предлагающим LINQ, другой альтернативой в этом случае будет использование метода экземпляра FindAll
:
List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);
Ответ 5
Вы должны взглянуть на Reflection API. Это метапространство имен с информацией о самом классе. Вы можете спросить наследование интерфейса и все.
http://msdn.microsoft.com/en-us/library/z919e8tw%28v=vs.80%29.aspx