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