Новый список из другого списка - PullRequest
0 голосов
/ 04 сентября 2018

Итак, проблема в том, что когда я прохожу циклы, которые я создаю, 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);
                 }
             }
         }
     }
 }

1 Ответ

0 голосов
/ 04 сентября 2018

В C # все объекты отправляются по ссылке. Когда вы делаете

List<int> tempVarlist = lineVarList;

вы на самом деле отправляете ссылку на tempVarlist, а это значит, что вы не создаете новый объект. Вы передаете адрес lineVarList на tempVarlist, чтобы они оба указывали на один и тот же адрес. Результат будет тот, который вы только что наблюдали. Вы практически используете один и тот же объект, но с двумя разными именами. По этой причине ваши действия влияют на оба списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...