Как написать код?
От: _FRED_ Черногория
Дата: 27.04.09 06:37
Оценка:
Дано: Некие контексты, которые выстроены в цепочку и позволяют искать внутри себя некие "объекты":
interface IContext
{
  // Возвращает "следующий" контекст или "null",
  // если текущий контекст последний в цепочке.
  IContext GetNext();

  // Возвращает удовлетворяющий значению параметра "criteria"
  // объект или "null", если объект не найдён.
  object FindItem(object criteria);
}

как видно, навигация по цепочке осуществляеься посредством вызова метода GetNext() от имеющегося экземпляра контекста.

Цепочка гарантированно не зациклена, её валидность проверять не нужно.

Требуется: в данной цепочке отыскать первый же объект, удовлетворяющий известному критерию, или же установить, что ни один из объектов не удовлетворяет критерию.

То есть нужно написать функцию
object FindInChain(IContext start, object criteria) {
  // Требуется пройтись по всей иерархии контекстов
  // и вернуть первый же объект, для которого IContext::FindItem(criteria)
  // вернёт не пустой результат. или же вернуть null, если подходящий элемент 
  // не был найден ни в одном из контекстов цепочки.
}

Если вам понадобятся дополнительные методы, пожалуйста.

Собственно интересует, что бы уважаемые коллеги написали внутри тела функции, в предположении, что это метод проекта, над которым они в данный момент работают.

Если бы без указанного только что ограничения ваш код оказался бы другим, то это тем более интересно с описанием того, почему примеры различаются.

P.S. Вариант, который мне в первую очередь пришёл в голову и весьма мне симпатичен, показался мне же излишне сложным и, наверняка, для кого-то непривычным. Потом, я надеюсь, позже мне его раскритикуют а пока любопытно взглянуть на привычные другим способы решения такой простой задачи.
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.