С# переносимая библиотека классов: найти элемент в списке по свойству

Я разрабатываю приложение для Windows Phone 8, в котором использую переносимые библиотеки классов. Похоже, что для таких проектов нет поддержки linq.

Есть ли хороший/рекомендуемый способ поиска элемента в списке на основе значения свойства?

Если я правильно понял, я не могу использовать что-то вроде: list.Find(i => i.ID == someValue);

Изменить: в настоящее время я использую foreach, но хотел бы знать, есть ли другое решение.

Параметры PCL: .NET 4.5, Silverlight 4, Windows Phone 7.5 и Магазин Windows.


person doschi    schedule 03.07.2013    source источник
comment
foreach? в любом случае это все, что linq делает под капотом   -  person Liam    schedule 03.07.2013
comment
В настоящее время я использую его (foreach), мне просто любопытно, существует ли другое решение. Надо было добавить это к вопросу...   -  person doschi    schedule 03.07.2013
comment
Почему нет поддержки LINQ для PCL? У вас есть ссылка на MSDN в этом отношении?   -  person Haspemulator    schedule 03.07.2013
comment
Относительно отсутствия поддержки LINQ в PCL: эта ссылка говорит, что метод List‹T›.Find поддерживается в PCL msdn.microsoft.com/en-us/library/x0b5b5bc.aspx   -  person Haspemulator    schedule 03.07.2013
comment
LINQ доступен в PCL. Я использую его прямо сейчас.   -  person Nate Diamond    schedule 04.07.2013
comment
В будущем, когда вы зададите вопрос о PCL, укажите, какими фреймворками вы ограничили свой проект PCL. Это очень актуально.   -  person Claus Jørgensen    schedule 04.07.2013
comment
@ClausJørgensen: Вы правы. Мои настройки: .NET 4.5, Silverlight 4, Windows Phone 7.5 и Магазин Windows   -  person doschi    schedule 04.07.2013
comment
Вы также можете отредактировать свой вопрос и добавить его туда :)   -  person Claus Jørgensen    schedule 04.07.2013


Ответы (3)


Поскольку вам не нужен Xbox, вы можете использовать LINQ в PCL. Запись в блоге с объяснением ограничений при использовании PCL.

LINQ-код:

list.FirstOrDefault(i=>i.ID==someValue);
person Teemu Tapanila    schedule 03.07.2013

Вы можете использовать list.FirstOrDefault(i=>i.ID==someValue);

person kadben    schedule 03.07.2013
comment
Пространство имен System.Linq окончательно доступно в PCL. Я только что добавил его в один из моих! - person Alexander; 05.07.2013

Старый добрый бинарный поиск должен помочь, если список отсортирован по свойству поиска. Тогда у вас будет вычислительная сложность O(log(n)) вместо O(n) с foreach, хотя накладные расходы на сортировку и определенные размеры списка могут сделать все эти трюки незначительными.

person Haspemulator    schedule 03.07.2013