ArrayList C # Содержит запрос метода - PullRequest
2 голосов
/ 19 октября 2010

У меня есть список ObservableCollection<myClass>.Он содержит 10 объектов типа MyClass.

class MyClass
{
  string name;
  int age;
}

Если я хочу найти все элементы в списке, где age = 10, можно ли использовать метод Contains?Если да, как я могу сделать это без использования итерации?

Ответы [ 5 ]

6 голосов
/ 19 октября 2010
var age10 = list.Where(i => i.age == 10);

Много запросов здесь: http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

5 голосов
/ 19 октября 2010

Нет, Contains ищет только определенное значение, а не что-то, соответствующее предикату.Он также находит только одно значение, а не каждое соответствующее значение.

Однако вы можете использовать Where из LINQ для объектов, если вы включены.NET 3.5 или выше:

foreach (var item in list.Where(x => x.Age == 10))
{
    // Do something with item
}
3 голосов
/ 19 октября 2010

Поскольку ObservableCollection<T> реализует Collection<T>, который реализует IEnumerable<T> ..., вы можете использовать методы расширения LINQ to Object, чтобы сделать это простым (даже если он будет использовать итерацию в фоновом режиме):

var results = list.Where(m => m.age == 10);
1 голос
/ 20 января 2012

Как уже говорили другие, использование .Where(i => i.Age == 10) будет правильным способом получить результат, указанный в вопросе.Вы должны использовать .Contains(), чтобы проверить свою коллекцию на предмет конкретного экземпляра вашего класса.

0 голосов
/ 19 октября 2010

Вы можете использовать linq для этого, но не Contains

 var foo = from bar in myCollection where bar.age == 10 select bar;
...