我遇到了以下问题 - 我有两个课程:
public class Component
{
public string Name { get; set; }
public string UnitOfMeasure { get; set; }
public List<Ingredient> Ingredients { get; set; }
public Component()
{
Ingredients = new List<Ingredient>();
}
}
public class Ingredient
{
public int Quantity { get; set; }
public Component Component { get; set; }
}
如您所见,Ingredient
类包含Component
类型的对象,Component
内有List
Ingredients
。
我的问题是 - 如何创建一个可以检查每个Component
(来自数据库)的函数,进入List
,检查它,如果它不是空的则更深入,但如果是,返回并检查List
的其他元素。
如果我的解释不好,我很抱歉。
答案 0 :(得分:1)
这是一个函数,它将返回通过迭代成分找到的所有组件的列表。它将通过引用检查它不包含多个组件。如果您在代码中复制组件,意味着同一组件有多个实例,则需要进行相等检查以代替foundcomponents.Contains。
function IList<Component> GetAllComponents(Component startingComponent) {
IList<Component> foundcomponents = new List<Component>();
foundcomponents.Add(startingComponent);
int searchindex = 0;
while(searchindex<foundcomponents.Count) {
Component c = foundcomponents[searchindex];
if(c.Ingredients!=null) {
foreach(Ingredient i in c.Ingredients) {
if(i.Component!=null && foundcomponents.Contains(i.Component)) {
foundcomponents.Add(i.Component);
}
}
}
searchindex++;
}
return foundcomponents;
}
答案 1 :(得分:1)
问题仍然含糊不清,因为我们不知道你想要的结果是什么,但是根据你想要做什么,这里有你可能需要的骨架。
public void DeepDive(Component component) {
var currentIngredients = component.Ingredients;
//This only works because the List is already initialized in the Component constructor.
if(currentIngredients.Any())
foreach(Ingredient ingredient in currentIngredients) {
//do stuff
if(ingredient.Component != null)
DeepDive(ingredient.Component);
}
}