元素列表不遵循我的递归方法c#

元素列表不遵循我的递归方法c#,c#,.net,recursion,C#,.net,Recursion,我有一个调用自身的方法(递归)。它收集了一些我需要分析的数据。 它以DTO的形式收集数据。 DTO设置: public class SequenceDTO { public string sequence { get; set; } public List<Element> stateList { get; set; } public SequenceDTO() { } public

我有一个调用自身的方法(递归)。它收集了一些我需要分析的数据。 它以DTO的形式收集数据。 DTO设置:

    public class SequenceDTO
    {
        public string sequence { get; set; }
        public List<Element> stateList { get; set; }

        public SequenceDTO()
        { }

        public SequenceDTO(string sequence, List<Element> stateList)
        {
            this.sequence = sequence;
            this.stateList = stateList;
        }
    }
公共类SequenceDTO
{
公共字符串序列{get;set;}
公共列表状态列表{get;set;}
公共序列to()
{ }
public SequenceDTO(字符串序列,列表状态列表)
{
这个序列=序列;
this.stateList=状态列表;
}
}
这是我初始化递归方法的方式:

string seq = "";
List<Element> elmList = new List<Element>();
initialSeqDTO.sequence = seq;
initialSeqDTO.stateList = elmList;
analyze(element, initialSeqDTO); //The recursion method
public void handleEventAnalysis3(Element elm, SequenceDTO dto)
{
    SequenceDTO newSeqDTO = new SequenceDTO();
    List<Element> elmList = new List<Element>();
    elmList = dto.stateList;
    newSeqDTO.sequence = dto.sequence;
    newSeqDTO.stateList = elmList;

    newSeqDTO.stateList.Add(clientElement);

    if (!clientElement.Name.Equals("Initial"))
         handleEventAnalysis3(clientElement, newSeqDTO);

    if (clientElement.Name.Equals("Initial"))
    {
        sequenceList.Add(newSeqDTO);
    }
}
string-seq=”“;
List elmList=新列表();
initialSeqDTO.sequence=seq;
initialSeqDTO.stateList=elmList;
分析(元素,初始SeqDTO)//递归法
递归方法:

string seq = "";
List<Element> elmList = new List<Element>();
initialSeqDTO.sequence = seq;
initialSeqDTO.stateList = elmList;
analyze(element, initialSeqDTO); //The recursion method
public void handleEventAnalysis3(Element elm, SequenceDTO dto)
{
    SequenceDTO newSeqDTO = new SequenceDTO();
    List<Element> elmList = new List<Element>();
    elmList = dto.stateList;
    newSeqDTO.sequence = dto.sequence;
    newSeqDTO.stateList = elmList;

    newSeqDTO.stateList.Add(clientElement);

    if (!clientElement.Name.Equals("Initial"))
         handleEventAnalysis3(clientElement, newSeqDTO);

    if (clientElement.Name.Equals("Initial"))
    {
        sequenceList.Add(newSeqDTO);
    }
}
public void handleEventAnalysis3(元素elm,序列到dto)
{
SequenceDTO newSeqDTO=新SequenceDTO();
List elmList=新列表();
elmList=dto.stateList;
newSeqDTO.sequence=dto.sequence;
newSeqDTO.stateList=elmList;
newSeqDTO.stateList.Add(clientElement);
如果(!clientElement.Name.Equals(“初始”))
handleEventAnalysis3(客户元素、newSeqDTO);
if(clientElement.Name.Equals(“首字母”))
{
sequenceList.Add(newSeqDTO);
}
}

这是将SequenceDTO添加到sequenceList中。但是对于每个SequenceDTO,dto.stateList都是相同的。这是怎么回事?

因为您为每个DTO分配了相同的列表:

 elmList = dto.stateList; // this reassigns the variable which makes you lose the newly created list
 newSeqDTO.sequence = dto.sequence;
 newSeqDTO.stateList = elmList
如果您只需删除以下行,它就可以工作:

elmList = dto.stateList;

创建一个新的
列表

相反,您只需调用
ToList()
即可生成新列表:

newSeqDTO.stateList = dto.stateList.ToList();

我认为新的List()已经涵盖了这一点,因为它与序列字符串一起工作。我会在早上第一件事就是测试它(不要让代码靠近我),然后如果它解决了我的问题,我会带着一个被接受的答案返回。这肯定会奏效。但它不包括我的要求,我可能没有在问题中详细说明。旧DTO中的列表可能包含我在新DTO中仍然想要的内容,而这在您的答案中丢失了。你的答案只是列一个新的清单。