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

本文关键字:引用 我的 列表 为什么 一样 | 更新日期: 2023-09-27 18:13:50

我创建了一个方法,其中传递一个列表给它。下面是该方法的样子:

private  bool ShouldEnable(int Index, List<LabelDisplay> ListOfLabels)
{
        LabelDisplay LabelToTest = ListOfLabels[Index];
        ...
}
LabelDisplay类是我在程序中创建的一个类。所以当我传递LabelDisplay类列表时,
if(ShouldEnable(i,Labels))
    Labels[i].Enable = true;

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

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

但这是非常慢的,我正在寻找更快的东西。

注意:

List<LabelDisplay> LabelList = ListOfLabels;

上面的行不工作,因为某种原因,如果我从LabelList中删除一个项目,它仍然会影响标签列表(我传递给方法的列表)。这似乎是一个非常奇怪的问题。那么我要怎么做才能使我可以随心所欲地删除和打乱这个列表但它仍然不会影响我传递给它的原始列表呢?

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

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

点击这里查看更多信息:

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

如果你想复制你的列表,一个快速的方法就是把它传递给一个新列表的构造函数。

例如:

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