Список ссылок затрагивается, когда очищается другой список - PullRequest
0 голосов
/ 23 декабря 2018

Я создал список как PartList, который создает метод с именем CombinePartList "и возвращает его. В другом методе мне нужны результаты этого метода, но также мне нужно очистить список PartList. Поэтому я создалдругой список, но когда я очищаю PartList, очищается и второй с именем * 1005. * Мой вопрос: почему это происходит и как я могу это исправить?

Вот мой код:

List<ModifiedPartList> PartList = new List<ModifiedPartList>();
List<ModifiedPartList> MpartList= new List<ModifiedPartList>();;
anotherMethode()
{

MpartList = CombinePartListforView(bar, ViewNum);
*
*
*            
PartList.Clear();
}

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

MpartList имеет ссылку на PartList.Таким образом, когда вы очистите один из них, другой будет очищен как будет.( Оба ссылаются на одно и то же значение )

В качестве решения я бы предложил вам полностью скопировать PartList с помощью цикла for и создавать новые объекты, подобные этому:

Public List<ModifiedPartList> FullCopy(List<ModifiedPartList> PartList)
{
List<ModifiedPartList> NewList=new List<ModifiedPartList>();
for (int i=0;i<PartList.Count();i++)
{
    NewList.Add(CopyObject(PartList[i]));//Write this function
}
return NewList();
}
0 голосов
/ 23 декабря 2018

Ваш фрагмент точно не говорит, что не так, но я предполагаю, что CombinePartListforView() возвращает ссылку на PartList и поэтому заставляет MpartList указывать на тот же экземпляр, что и PartList.Вы, вероятно, не хотите изменять сами экземпляры списка, а только содержимое.

Попробуйте

MpartList = new List<ModifiedPartList>(CombinePartListforView(bar, ViewNum));

или убедитесь, что вы возвращаете новый экземпляр в этом методе.

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