Важной частью вашего кода является следующее:
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
.