Удаление объекта из листа, когда объект становится null - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Есть класс, допустим это клетка на поле
Листинг программы
  1. class Foo
  2. {
  3. public ulong x;
  4. public ulong y;
  5. public List<Foo> neighbors;
  6. public Foo(ulong x, ulong y) { .. }
  7. }
У этой клетки есть соседние клетки. Затем я создаю несколько клеток и связываю их:
Листинг программы
  1. var a = new Foo(201, 201);
  2. var b = new Foo(203, 199);
  3. var c = new Foo(204, 199);
  4. var d = new Foo(205, 199);
  5. var e = new Foo(205, 200);
  6.  
  7. b.neighbors.Add(c);
  8. c.neighbors.AddRange(new[] { b, e, d });
  9. d.neighbors.AddRange(new[] { c, e });
  10. e.neighbors.AddRange(new[] { a, c, d });
После этого, я хочу удалить клетку

d

Листинг программы
  1. d = null;
  2. GC.Collect();
И, по моим ожиданиям, размер листов, у объектов

c, e

должен уменьшиться до 2. или хотябы 3 элемент должен быть null. Но этого не происходит. Что же я делаю не так? Необходимо при удалении объекта (=null) чтобы он занулился, в листах, у других объектов. Необходимо решить задачку не перебирая каждую клетку в цикле. (те нужно пользоваться ссылками, как я понимаю) (Ибо клеток может быть очень много, и каждую вот так перебирать..) Возможно мне нужен не лист? Подскажите пожалуйста

Решение задачи: «Удаление объекта из листа, когда объект становится null»

textual
Листинг программы
  1. using System;
  2.  
  3. namespace ConsoleApplication77
  4. {
  5.     class Program
  6.     {
  7.         class MyClass
  8.         {
  9.             public int x=666;
  10.         }
  11.         static void Main(string[] args)
  12.         {
  13.             MyClass ref1 = new MyClass();//создали объект и ссылку на него ref1
  14.             MyClass ref2 = ref1;//создали еще одну ссылку на тот же объект
  15.             ref1 = null; //присвоили первой ссылке null. Объект никак не изменился.
  16.             Console.WriteLine(ref2.x); // Выведет 666. Обратились к объекту по второй ссылке и вывели значение поле x на экран.
  17.             Console.WriteLine(ref1.x); // Вылетит с NullReferenceException. Ссылка больше ни на что не указывает.
  18.             Console.Read();
  19.         }
  20.     }
  21. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы