当我没有告诉它通过引用传递时,为什么我的列表像引用一样被传递?

时间:2014-07-21 16:41:41

标签: c# list parameters

我创建了一个向其传递列表的方法。这是方法的样子:

private  bool ShouldEnable(int Index, List<LabelDisplay> ListOfLabels)
{
        LabelDisplay LabelToTest = ListOfLabels[Index];
        ...
}

LabelDisplay类是我在程序中创建的类。所以当我传递LabelDisplay类的列表时,

if(ShouldEnable(i,Labels))
    Labels[i].Enable = true;

它应该将其作为值传递而不是通过引用传递。但是,在调试时,我注意到如果我从ShouldEnable()方法中的ListOfLabels中删除一个项目,它也会从标签中删除它。我目前的工作是:

List<LabelDisplay> LabelList = new List<LabelDisplay>();
foreach(LabelDisplay LabelDis in ListOfLabels)
{
    LabelList.Add(LabelDis);
}

但这很慢,我正在寻找更快的东西。

请注意:

List<LabelDisplay> LabelList = ListOfLabels;

如果我从LabelList中删除一个Item,上面的行不起作用,它仍然会影响标签列表(我传递给Method的List)。这似乎是一个非常奇怪的问题。那么我该如何制作它以便我可以删除并尽可能多地删除此列表,但它仍然不会影响我传递给它的原始列表?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您实际上是通过值传递,只是引用类型变量的值是对对象的引用。但是,您仍然按值传递 - 传入参数的值复制到ListOfLabels,但该值是对List的引用,所以是的,它们仍将指向相同的列表,而不是它的副本。

请尝试此处获取更多信息:

http://msdn.microsoft.com/en-gb/library/s6938f28.aspx

如果要复制列表,快速执行此操作只需将其传递到新列表的构造函数中即可。

e.g:

List<LabelDisplay> copyOfList = new List<LabelDisplay>(OriginalList);