簡體   English   中英

當我不告訴我要通過引用傳遞列表時,為什么我的列表像引用一樣傳遞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM