我创建了一个向其传递列表的方法。这是方法的样子:
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)。这似乎是一个非常奇怪的问题。那么我该如何制作它以便我可以删除并尽可能多地删除此列表,但它仍然不会影响我传递给它的原始列表?
答案 0 :(得分:1)
在这种情况下,您实际上是通过值传递,只是引用类型变量的值是对对象的引用。但是,您仍然按值传递 - 传入参数的值复制到ListOfLabels,但该值是对List的引用,所以是的,它们仍将指向相同的列表,而不是它的副本。
请尝试此处获取更多信息:
http://msdn.microsoft.com/en-gb/library/s6938f28.aspx
如果要复制列表,快速执行此操作只需将其传递到新列表的构造函数中即可。
e.g:
List<LabelDisplay> copyOfList = new List<LabelDisplay>(OriginalList);