我有一个调用自身的方法(递归)。它收集了一些我需要分析的数据。它在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;
}
}我就是这样初始化递归方法的:
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);
}
}这将SequenceDTO添加到sequenceList中。但是dto.stateList对于每个SequenceDTO都是一样的。这怎么可能呢?
发布于 2014-11-11 15:34:23
创建一个新的List<Element>
List<Element> elmList = new List<Element>();但是,您可以使用对旧列表的引用覆盖它:
elmList = dto.stateList;相反,只需调用ToList()生成一个新列表:
newSeqDTO.stateList = dto.stateList.ToList();发布于 2014-11-11 15:32:05
因为您将相同的列表分配给每个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;https://stackoverflow.com/questions/26868396
复制相似问题