我創建了IDisposable
類對象,我將其存儲在List<T>
中。我在一個函數/過程中將對象添加到List<T>
。但是,如果使用Using{}
表示法,列表中的對象也會在列表中「Disposed」。C#添加本地對象到列表<T>然後處理本地對象 - 幫助理解?
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);
}
然後一切都很好,並在列表中的對象要素確定。
問:爲什麼?當函數完成但對象的引用保持不變時,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'在其作用域的末尾自動調用Dispose()對象。如果您需要訪問在您的使用語句之外創建的對象,則不要使用'using'。列表中的對象與您處理的對象相同。使用這些對象,然後自己調用Dispose()。在for循環中,您正在創建98個對象的新實例並將它們添加到列表中。你爲什麼會想象這些新的對象會覆蓋以前的對象?你必須在循環之外聲明對象,然後用循環中的新對象覆蓋它。 – ManoDestra
你的問題有點不清楚。你的代碼的預期行爲是什麼?什麼是實際行爲?您正在向列表中添加一個對象,然後將其處理掉。對我而言,你所描述的聽起來像是合理的行爲,所以我試圖更好地理解你的實際問題。 –
@DanForbes僅僅因爲你理解它並不意味着OP就是這樣。這就是問題被問到的原因。 –