Линк, где оговорка - PullRequest
       10

Линк, где оговорка

2 голосов
/ 06 августа 2010

Я думал, что где-то давно видел пример предложения where, в котором была вызвана функция, которая дала bool результат, и я не могу найти его снова, поэтому я обрисую свою проблему.

У меня есть коллекция

Dictionary< string, KeyValuePair < int, int >>  

, в котором я хочу получить запрос для ключа string. На поверхности это просто, но, к сожалению, строка (над которой я не имею никакого контроля) является закодированной координатой ячейки сетки.

Запрос состоит в том, чтобы извлечь записи (как тип Dictionary), которые попадают в определенную часть сетки. Выполнение вызова функции cells.Where(c => isWithinArea(c.Key, area)) компилируется, но не работает. Функция никогда не вызывается.

Буду рад любым предложениям сделать это с минимальными усилиями.

Ответы [ 2 ]

11 голосов
/ 06 августа 2010

Наиболее вероятные причины, по которым функция никогда не вызывается, могут быть связаны с тем, что в последовательности, в которой вы находитесь, нет элементов или вы вообще никогда не вызываете перечислитель. LINQ оценивается как ленивый, что означает, что ни одно из предоставленных вами выражений фактически не вызывается, пока вы не начнете с foreach или ToList().

0 голосов
/ 06 августа 2010
cells.Keys.Where(key => isWithinArea(key, area))
...