2012-02-15 2 views
2

У меня есть ArrayList объектов моего пользовательского класса. Я хотел бы знать, если ArrayList содержит объект с определенным атрибутом. Я не забочусь об объекте, просто если есть. Да, я мог бы сделать это с помощью цикла foreach, но мне было интересно, есть ли более элегантный способ сделать это.C# как определить, содержит ли ArrayList объект с определенным атрибутом

Спасибо за предложения.

ответ

8

Ну, для начала я бы предложил использовать List<T> вместо ArrayList. Тогда LINQ к объектам делает его очень легко:

if (list.Any(x => x.HasFoo)) 
{ 
} 

Или без LINQ (но List<T>)

if (list.FindIndex(x => x.HasFoo) != -1) 
{ 
} 

Если вы действительно нужно придерживаться необщего коллекции, но есть LINQ к объектам доступны также, вы можете использовать:

if (arrayList.Cast<YourType>().Any(x => x.HasFoo)) 
{ 
} 
+0

Почему люди так часто путают методы расширения с LINQ? LINQ в соответствии с именем представляет собой интегрированный язык запроса формы: от x в коллекции, где условие select ..., которое может быть переведено в цепочку методов, например collection.Where (x => condition). Выберите (x => материал) – edvaldig

+0

@edvaldig: Это больше, чем это - это целая коллекция технологий. Например, используется LINQ to Objects. Я с удовольствием обновлю ответ, чтобы уточнить это, но я думаю, что все же разумно сказать, что этот код «использует LINQ». –

+0

Спасибо. Первый вариант - именно то, что я хотел! Я также заменил ArrayList на список , чтобы у меня была вся необходимая функциональность. – Perlnika

-1

использовать Linq:

var query = from o in yourarray select o where o.atribute==ValueIWant; 


`query.Count()` will return the number of objects that fit the condition. 

проверьте, MSDN Например: Linq example

+0

Это не будет компилироваться (выбрать до того, где), было бы неэлегантным, если бы оно было (выражение запроса более подробное, чем просто один вызов 'Where'), и было бы неэффективным (используя' Count() 'вместо' Any() 'требует тестирования против всей коллекции вместо того, чтобы останавливаться, когда находит первое совпадение. О, и вам понадобится' Cast <> 'или явно типизированная переменная диапазона для работы с' ArrayList' в первую очередь. , –

Смежные вопросы