Почему нам нужно фильтровать содержимое рекурсивно - PullRequest
1 голос
/ 13 октября 2010

У меня есть приложение, в котором некоторые стороны я использую условия фильтра, но я не знаю смысла использования слова "рекурсивный" в условиях этого фильтра. Вот немного кодалюбой скажет мне, почему здесь используется рекурсивное false

1 Ответ

2 голосов
/ 13 октября 2010

Важной частью вашего кода является следующее:

do
{
  retval = ((ObjectFilter)m_filterValue).Apply(propVal);
  myObject = propVal;
  if (m_recursive && retval == false && myObject != null)
  {
     propVal = (DataModelObject)prop.GetValue(myObject, null);
  }
  else
  {
     myObject = null;
  }
} while (myObject != null);

В основном, когда FilterType равен objectFilt, тогда код переходит в цикл do...while, который представляет собой цикл кода, который всегда выполняется по крайней мере один раз, потому что рекурсивное условие (в данном случае myObject != null ) проверяется после того, как код цикла был выполнен один раз.

Если m_recursive ложно, то retval и myObject игнорируются, а myObject устанавливается на ноль, поэтому, когда проверяется условие рекурсии, происходит сбой и цикл завершается.

Если для m_recursive установлено значение true, установка myObject на ноль определяется двумя вещами: myObject является нулем и retval является ложью.

retval устанавливается m_filterValue.Apply(propVal). Непонятно откуда взялся propVal.

В случае, если вы не знаете, что такое рекурсия, именно здесь кусок кода заставляет себя запускаться снова. В вашем коде это представлено циклом do...while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...