[英]Why is my list being passed like a reference when I did not tell it to be passed by reference?
我創建了一個傳遞列表的方法。 該方法如下所示:
private bool ShouldEnable(int Index, List<LabelDisplay> ListOfLabels)
{
LabelDisplay LabelToTest = ListOfLabels[Index];
...
}
LabelDisplay類是我在程序中創建的類。 因此,當我傳遞LabelDisplay類的列表時,
if(ShouldEnable(i,Labels))
Labels[i].Enable = true;
它應該將其作為值而不是通過引用傳遞。 但是,在調試時,我注意到,如果我在ShouldEnable()方法中從ListOfLabels中刪除一項,則它也會從Labels中刪除。 我目前的解決方法是:
List<LabelDisplay> LabelList = new List<LabelDisplay>();
foreach(LabelDisplay LabelDis in ListOfLabels)
{
LabelList.Add(LabelDis);
}
但這很慢,我正在尋找更快的東西。
注意:
List<LabelDisplay> LabelList = ListOfLabels;
上面的行由於某些原因而不起作用,如果我從LabelList中刪除一個項目,它仍然會影響Labels列表(我傳遞給Method的列表)。 這似乎是一個非常奇怪的問題。 那么,如何制作它,以便我可以盡可能多地刪除和處理此列表,但仍然不會影響傳遞給它的原始列表?
在這種情況下,您實際上是按值傳遞的,只是引用類型變量的值是對對象的引用。 但是,您仍然按值傳遞-復制到ListOfLabels的傳入參數的值,但是該值是對List的引用,因此,是的,它們仍將指向同一列表,而不是它的副本。
請嘗試此處以獲取更多信息:
http://msdn.microsoft.com/en-gb/library/s6938f28.aspx
如果要復制列表,一種快速的方法是將其簡單地傳遞到新列表的構造函數中。
例如:
List<LabelDisplay> copyOfList = new List<LabelDisplay>(OriginalList);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.