所以,问题出在我遍历创建tempNumberList的循环中,然后进入if(true)语句后,它向tempNumberList添加了变量,但是当我添加它时,lineVarList也以相同的方式向其自身添加了变量
我什至不知道要搜索什么。我不认为这很困难,但我不知道发生了什么。
if (checkedNumbersResult)
{
finalResult.MaximumNumber = pyramidNumbers.First().First();
finalResult.NumbersInLine.Add(pyramidNumbers.First());
AssignmentResult notBranchingResults = new AssignmentResult
{
MaximumNumber = pyramidNumbers.First().First(),
NumbersInLine = new List<List<int>>()
};
foreach (var pyramidNumberList in pyramidNumbers.Skip(1))
{
List<List<int>> tempNumberList = new List<List<int>>();
foreach (var lineVarList in finalResult.NumbersInLine)
{
List<int> tempVarlist = lineVarList;
for (int varListItem = 0; varListItem < lineVarList.Count(); varListItem++)
{
if (true)
{
tempVarlist.Add(pyramidNumberList.Skip(varListItem).First());
tempNumberList.Add(tempVarlist);
}
}
}
}
}
答案 0 :(得分:2)
在C#中,所有对象都是通过引用发送的。
List<int> tempVarlist = lineVarList;
您实际上发送了对tempVarlist
的引用,这意味着您没有创建新对象。您将lineVarList
的地址传递给tempVarlist
,以便他们两个都指向相同的地址。结果将是您刚刚观察到的结果。实际上,您使用相同的对象,但是具有两个不同的名称。这就是您的操作会影响两个列表的原因。