Удаление объекта из листа, когда объект становится 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();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д