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

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

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

Всем привет. Есть класс, допустим это клетка на поле
class Foo
        {
            public ulong x;
            public ulong y;
            public List<Foo> neighbors;
 
            public Foo(ulong x, ulong y) { .. }
        }
У этой клетки есть соседние клетки. Затем я создаю несколько клеток и связываю их:
var a = new Foo(201, 201);
var b = new Foo(203, 199);
var c = new Foo(204, 199);
var d = new Foo(205, 199);
var e = new Foo(205, 200);

b.neighbors.Add(c);
c.neighbors.AddRange(new[] { b, e, d });
d.neighbors.AddRange(new[] { c, e });
e.neighbors.AddRange(new[] { a, c, d });
После этого, я хочу удалить клетку

d

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

c, e

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

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

textual
Листинг программы
using System;
 
namespace ConsoleApplication77
{
    class Program
    {
        class MyClass
        {
            public int x=666;
        }
        static void Main(string[] args)
        {
            MyClass ref1 = new MyClass();//создали объект и ссылку на него ref1
            MyClass ref2 = ref1;//создали еще одну ссылку на тот же объект
            ref1 = null; //присвоили первой ссылке null. Объект никак не изменился.
            Console.WriteLine(ref2.x); // Выведет 666. Обратились к объекту по второй ссылке и вывели значение поле x на экран.
            Console.WriteLine(ref1.x); // Вылетит с NullReferenceException. Ссылка больше ни на что не указывает.
            Console.Read();
        }
    }
}

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


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

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

5   голосов , оценка 4.2 из 5
Похожие ответы