Удаление объекта из листа, когда объект становится 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();
}
}
}