C# 如何在具有与属性相同的列表的类中进行遍历?

C# 如何在具有与属性相同的列表的类中进行遍历?,c#,list,C#,List,我有一节这样的课 public class FilterConditionDto { public string Type { get; set; } public bool Parent { get; set; } public string[] Value { get; set; } public string Column { get; set; } public string DataType { get; set; } pub

我有一节这样的课

 public class FilterConditionDto
{
    public string Type { get; set; }

    public bool Parent { get; set; }

    public string[] Value { get; set; }

    public string Column { get; set; }

    public string DataType { get; set; }

    public string Operator { get; set; }

    public List<FilterConditionDto> nodes { get; set; }
}
公共类筛选器条件到
{
公共字符串类型{get;set;}
公共布尔父对象{get;set;}
公共字符串[]值{get;set;}
公共字符串列{get;set;}
公共字符串数据类型{get;set;}
公共字符串运算符{get;set;}
公共列表节点{get;set;}
}

如何创建遍历内部列表的所有元素和内部列表元素的循环,请注意,列表中的元素也可以包含内部列表。

您可以使用递归执行所需操作:

private void Filter(FilterConditionDto dto)
{
    if (dto != null)
    {
        // do something with dto

        if (dto.nodes != null)
        {
            foreach (FilterConditionDto subDto in dto.nodes)
            {
                Filter(subDto); // <-- here you call the method recursively
            }
        }
    }
}
private void过滤器(过滤器条件到dto)
{
如果(dto!=null)
{
//用dto做点什么
if(dto.nodes!=null)
{
foreach(过滤条件到dto.nodes中的子dto)
{

过滤器(subDto);//您可以使用递归执行您想要的操作:

private void Filter(FilterConditionDto dto)
{
    if (dto != null)
    {
        // do something with dto

        if (dto.nodes != null)
        {
            foreach (FilterConditionDto subDto in dto.nodes)
            {
                Filter(subDto); // <-- here you call the method recursively
            }
        }
    }
}
private void过滤器(过滤器条件到dto)
{
如果(dto!=null)
{
//用dto做点什么
if(dto.nodes!=null)
{
foreach(过滤条件到dto.nodes中的子dto)
{
过滤器(subDto);//递归

public void遍历(列表模型)
{
foreach(模型中的var项目)
{
如果(item.nodes.Count>0)
{
遍历(项.节点)
}
}
}
递归

public void遍历(列表模型)
{
foreach(模型中的var项目)
{
如果(item.nodes.Count>0)
{
遍历(项.节点)
}
}
}


遍历时您想做什么?这听起来很明显,但我建议您将
节点初始化为构造函数中的空列表,并将其setter
设为private
,这样您就可以循环,而无需对照
null
检查集合。为什么要创建未使用的对象?@s.m。在某些情况下可能会对内存造成相当大的影响。@PatrickHofman,因为1)空集合严重违反了最小意外原则(有多少次您使用了.NET类并发现一个假设的
子集合是
空的
?)2)在适当的分析清楚地表明几个空列表确实会导致巨大的内存消耗之后,使初始化变得懒惰将非常简单(也因为私有setter)。因为您认为一堆空集合可能是一个问题,所以在代码中撒上空检查意味着使其变得比实际需要的更复杂。那么选项2是唯一正确的解决方案。在遍历时您想做什么?听起来很明显,我建议您将
节点
初始化为构造函数中的空列表ctor并将其setter
设为private
,这样您就可以循环,而不必根据
null
检查集合。为什么要创建未使用的对象?@s.m.在某些情况下,这可能会对内存造成相当大的影响。@patrickhoffman,因为1)null集合严重违反了最小意外原则(有多少次您使用了.NET类,并发现一个假设的
子类
集合是
null
?)以及2)在适当的分析清楚地表明一些空列表确实会导致巨大的内存消耗之后,使初始化变慢将非常简单(也因为私有setter)。因为您认为一堆空集合可能是一个问题,所以在代码中添加空检查意味着使其变得比实际需要的更复杂。然后,选项2是唯一正确的解决方案。请注意循环引用。您必须跟踪所遍历的筛选条件,这仅适用于您的筛选有m:n个关系,而不是1:n.Stackoverflow在这一个上变量f=newfilterconditiondto();f.nodes=newlist(){f};Filter(f);每次迭代的返回将是一个字符串,我想将结果附加到一个大字符串中。然后使用
StringBuilder
,并在每次递归调用中传递。注意循环引用。您必须跟踪您所遍历的筛选条件,这仅适用于您的筛选具有m:n关系的情况,而不是1:n.Stackoverflow在这个变量上f=new Filter conditiondto();f.nodes=new List(){f};Filter(f);每次迭代的返回都是一个字符串,我想将结果附加到一个大字符串中。然后使用
StringBuilder
并在每次递归调用中传递它。