У меня есть дерево (a List<T>
), которое содержит количество ItemType
классов (см. Код ниже);класс имеет свойства OverrideDiscount
(которые могут быть null
, что указывает на использование DefaultDiscount
(которые могут быть null
, что указывает на использование parent ItemType
's CalculatedDiscount
))
Итак, вы видите, что мне нужно набрать дерево (которое, кстати, List<ItemType>
), чтобы получить CalculatedDiscount
родителя, потому что это может быть null
, что означает, что вам нужно получить родительродительский CalculatedDiscount
и так далее ...
Неужели плохая идея поместить код для этого в аксессор Get
?
Как бы вы справились с этим?
Так же, как sidenote, все эти данные поступают через SqlDataReader
из базы данных в произвольном порядке, после чего список свойств Children
заполняется циклом по дереву и добавляется в список Children
в зависимости от ситуации.Таким образом, родители не знают о детях до тех пор, пока не будет вызван метод доступа Set
, исключая возможность добавления чего-либо полезного в метод доступа Set
(например, установка всех детей CalculatedDiscount
в метод доступа Set
).Если только я не пропустил какой-то другой способ сделать это (очень возможно, рекурсия иногда жарит мой мозг).
Заранее спасибо
Класс пока:
public class ItemType
{
public int ID;
public int? ParentID;
public List<ItemType> Children;
public double? DefaultDiscount;
public double? OverrideDiscount;
public double CalculatedDiscount
{
get
{
if (OverrideDiscount != null)
{
return (double)OverrideDiscount; //+ Autospec qty
}
else
{
if (DefaultDiscount != null)
{
return (double)DefaultDiscount;
}
else
{
//I need to get this ItemType's parent's discount
//here by recursing up the tree...is this a bad idea?
}
}
}
}
}