将List传递给方法,在不影响'原始'的情况下修改方法中的列表

本文关键字:方法 原始 情况下 列表 修改 影响 List | 更新日期: 2023-09-27 18:12:38

抱歉,如果这个主题看起来很模糊,我试着尽我所能地总结它,而不知道我想要实现的确切术语。

实际上我有一个列表然后我调用一个方法

public List<int> myList;
void Start () {
    myList = new List<int>();
    myList.Add (1);
    myList.Add (2);
    doSomething(myList);
    foreach (int i in myList){
        print (i);
    }
}

在我的方法中,我想这样做(例如)

public void doSomething (List<int> myPassedList) 
{
    int A = 5;
    myPassList.Add (A);
    //... And then some other cool code with this modified list
}

然而,我不想改变原来的列表,我想要它完全一样。从本质上讲,当我将列表传递给方法时,我想要一个列表的副本,然后每次调用该方法时都将其创建为新的。

我想看到控制台打印'1'然后'2'

但是它会打印'1','2'和'5'

希望这一切都有意义!非常感谢您的帮助

吉姆

将List传递给方法,在不影响'原始'的情况下修改方法中的列表

List是一个引用类型,因此当您将myPassedList作为参数传递给doSomething时,您正在修改原始列表。

您有两个选择,或者调用ToList()或创建一个新的列表,作为一个例子:

public void doSomething (List<int> myPassedList) 
{
    List<int> newList = myPassedList.ToList();
    int A = 5;
    newList.Add(A);
    //... And then some other cool code with this modified list
}

原始列表myList将只返回1和2。

如果您编写的方法与列表一起工作,但不会修改该列表,那么您应该在中使用

对进行代码记录。
public void doSomething ( IEnumerable<int> myPassedValues ) 
{
    List<int> newList = myPassedValues.ToList();
    int A = 5;
    newList.Add(A);
    //... And then some other cool code with this modified list
}

现在,您和所有其他人都知道,通过阅读声明,传入的列表将不会在此方法中被修改。

在doSomething()方法中创建一个重复列表:

var newList = new List<int>(myPassedList);
int A = 5;
newList.Add (A);

myPassedList不受影响

您可以简单地将所有项目复制到新列表中。

 public void doSomething (List<int> myPassedList) 
 {
     List<int> list = myPassedList.GetRange(0, myPassedList.Count);
 }

您可以简单地在函数

中复制原始列表
    public void doSomething (List<int> myPassedList) 
 {
     List<int> clonedList = myPassedList;
// doing something here with clonedList
     } 
相关文章: