Могу ли я получить терьер с лямбдами? - PullRequest
4 голосов
/ 31 июля 2009

В эти дни я пишу много кода с лямбдами.

return _schema.GetAll<Node>()
           .ToList()
           .FindAll(node => node.Type == NodeType.Unmanaged)
           .Cast<Shape>()
           .ToList();

Примечание. GetAll () возвращает IList.

Могу ли я получить какой-нибудь терьер?

Ответы [ 2 ]

3 голосов
/ 31 июля 2009
  1. Вы можете заменить ToList с последующим FindAll на Where.
  2. Популярный стандарт с лямбда-параметрами в простых выражениях - это один символ. 'узел' может быть переименован в просто 'n'.
  3. Ваш метод может вернуть IEnumerable вместо IList. При необходимости вызывающий метод может вызвать ToList.

После того, как:

return _schema.GetAll<Node>().Where(n => n.Type == NodeType.Unmanaged).Cast<Shape>();
2 голосов
/ 31 июля 2009

Это должно работать.

return _schema.GetAll<Node>()
    .Where(node => node.Type == NodeType.Unmanaged)
    .Cast<Shape>()
    .ToList()

Если ваш метод имеет тип возврата IEnumerable<Shape>, вам не нужно вызывать ToList().

Вы также можете написать это так (с IEnumerable<Shape> типом возврата):

return from node in _schema.GetAll<Node>()
       where node.Type == NodeType.Unmanaged
       select node as Shape;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...