gpt4 book ai didi

C# 将本地对象添加到列表 然后处理本地对象 - 帮助理解?

转载 作者:行者123 更新时间:2023-11-30 15:21:42 24 4
gpt4 key购买 nike

我创建了一个 IDisposable我存储在 List<T> 中的类对象.我将对象添加到 List<T>在函数/过程中。但是,如果我使用 Using{}表示法,列表中的对象也会在列表中被“处置”。

List<MyObject> MyList = new List<MyObject>;

private void AddObjects()
{
using (MyObject Mo = New MyObject())
{
Mo.Name = "MyName";
Mo.Age = 30;
MyList.Add(Mo);
}
}

在此实例中,列表中的对象元素为空。然而,如果我使用代码:

List<MyObject> MyList = new List<MyObject>;

private void AddObjects()
{
MyObject Mo = New MyObject()
Mo.Name = "MyName";
Mo.Age = 30;
MyList.Add(Mo);
}

然后一切正常,列表中的对象元素就OK了。

问题:为什么?当函数完成但对对象的引用保留时,MyObject 失去范围。

然后就是下面的代码:

List<MyObject> MyList = new List<MyObject>;

private void AddObjects()
{
for (int i = 1; i < 99; i++)
{
MyObject Mo = New MyObject()
Mo.Name = "MyName";
Mo.Age = 30 + ctr;
MyList.Add(Mo);
}
}

这里 MyObject 正在被一个新对象覆盖,但旧对象仍然存在 - 为什么以前的引用没有被新对象覆盖?

最佳答案

快速回答:

创建新对象的 Using 语句将在 using 语句结束时自动释放该对象。这就是 Using 的目的,自动处理事物以防止需要手动清理。 (MSDN 链接:https://msdn.microsoft.com/en-us/library/yh598w02.aspx)

问题 2:使用下面的代码,一切正常,列表中的对象元素也正常。

为什么?当函数完成但对对象的引用保留时,MyObject 失去范围。

List<MyObject> MyList = new List<MyObject>;

private void AddObjects()
{
MyObject Mo = New MyObject()
Mo.Name = "MyName";
Mo.Age = 30;
MyList.Add(Mo);

}

答案:您的对象现在超出了范围,但是 MyList 变量仍然持有对存储在您的 Mo 变量中的对象的引用。 MyList 对象仍在范围内,它与之前的对象相同,因此保留更改。

问题 3:然后就是下面的代码:

List<MyObject> MyList = new List<MyObject>;

private void AddObjects()
{

for (int i = 1; i < 99; i++)
{
MyObject Mo = New MyObject()
Mo.Name = "MyName";
Mo.Age = 30 + ctr;
MyList.Add(Mo);
}
}

这里 MyObject 正在被一个新对象覆盖,但旧对象仍然存在 - 为什么以前的引用没有被新对象覆盖?

答案 3:在每个循环中,您都在创建一个名为 Mo 的新变量。这每次都会创建一个新的地址空间和一个新的对象。

主要答案如果你想把它们留在身边,就不要丢弃它们。当您希望它们消失时,将它们处理掉。

关于C# 将本地对象添加到列表<T> 然后处理本地对象 - 帮助理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36987678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com