Просто выполните некоторую практику и остановитесь на этом примере. Я обнаружил, что ссылки ранее созданных членов списка были еще живы, почему?Почему объект все еще жив?
anotherShoe
и newShoe
все еще имели значения, которые были присвоены их ссылочным членам, однако, как вы можете видеть, реальные объекты были очищены. Я знаю, что могу присвоить им нулевые значения, но не автоматически ли они собираются/собираются мусором, когда их ссылочные объекты были List<T>.Clear()
?
спасибо.
List<Shoe> shoeCloset = new List<Shoe>();
shoeCloset.Add(new Shoe() { styles = Styles.Sneakers, colour = "Red" });
shoeCloset.Add(new Shoe() { styles = Styles.Sandals, colour = "Green" });
shoeCloset.Add(new Shoe() { styles = Styles.Flipflops, colour = "Yellow"});
shoeCloset.Add(new Shoe() { styles = Styles.Loafers, colour = "Brown" });
shoeCloset.Add(new Shoe() { styles = Styles.Wingtips, colour = "Blue" });
//int numberOfShoes = shoeCloset.Count;
//foreach (Shoe shoe in shoeCloset)
//{
// shoe.styles = Styles.Sneakers;
// shoe.colour = "White";
//}
shoeCloset.RemoveAt(3);
Shoe newShoe = shoeCloset[2];
Shoe anotherShoe = shoeCloset[1];
anotherShoe.colour = "Grey";
anotherShoe.colour = "Green";
if (shoeCloset.Contains(anotherShoe))
{
Console.WriteLine("Contains another shoe");
}
shoeCloset.Clear();
anotherShoe.ToString(); //<---this still contains values after shoeCloset has been cleared.
newShoe.ToString(); //<---this still contains values after shoeCloset has been cleared.
'Clear()' не удаляет объекты, он только сокращает ссылку между вашим списком и созданным экземпляром объекта. Это нормально. У вас все еще есть ссылки, указывающие на первые 2 объекта, поэтому они не будут удалены GC. – Vlad
Ваша предпосылка неверна. List.Clear() просто очищает список - удаляет объект из списка. Но до тех пор, пока ссылается на объект, Мусорщик не может освободить память, которую он занимает. –
, где вы очищаете содержимое 'anotherShoe' и какова цель этих двух строк' notherShoe.colour = "Gray"; anotherShoe.colour = "Green"; 'вы даже использовали отладчик ...? вы знакомы со словом «Null» в отношении назначения – MethodMan