2013-07-27 26 views
-5

我有一個列表,並且已經用myObjects填充它。我處理對象,然後我想通過釋放對象的引用來收集垃圾對象。這將如何成爲最好的?如何使列表中的每個對象爲空

我不能使用foreach循環,因爲你不能改變循環內的集合。

+2

你要什麼才達到?清除列表? – Zbigniew

+2

_什麼意思_「make [an] object null _ _? – stakx

+0

刪除對象的所有引用。如果列表中有1000個對象被重新指定 - 是否可以刪除這些引用 – Paul

回答

2

此更新列表,並且不產生新的內容,新的名單。

for (i = 0; i < list.Count; i++) { 
    list[i] = null; 
} 
+0

是的感謝 - 正在考慮哪些是不正確的。 – Paul

-2

使用List(T).Clear()方法:http://msdn.microsoft.com/en-us/library/dwb5h52a.aspx

該取消引用的所有對象,並設置計數爲0

如果你真的需要保留相同的計數和您的列表中設置每個項目爲空,你可以簡單地使用ForEach()

list.ForEach(x => x = null) 
+0

完全刪除對象 – Sayse

+0

沒錯,我澄清了答案。 – idmadj

+0

這不會更新列表。 – Maarten

0
using System.Collections.Generic; // required for `IEnumerable<T>` 
using System.Linq;    // required for the `Select` LINQ operator 

static IEnumerable<T> ReplaceAllByNullReferences(this IEnumerable<T> xs) where T : class 
{ 
    return xs.Select(x => null); 
}  // ^^^^^^^^^^^^^^^^^^^^ 
     // returns a sequence of the same length as the original sequence 
     // in which every object reference has been replaced by a null reference 
+0

這不會更新列表。 – Maarten

+0

@Maarten:由於OP沒有太具體,我想我不會太具體,只是展示一般的想法。 OP可以自由地將我的示例適應於他的特定需求,例如:'someSequence = someSequence.ReplaceAllByNullReferences();' – stakx

0

你基本上要通過列表進行迭代,並且每個對象分配給空,像這樣:

var myList = new List<object>(); 

for (var i = 0; i < 9; i++) 
{ 
    myList.Add(new object()); 
} 

for (var i = 0; i < myList.Count; i++) 
{ 
    myList[i] = null; 
} 
+0

爲什麼downvote? – JMK

相關問題