Когда вы передаете список методу, вы передаете указатель на указанный список, поэтому вы изменяете «оригинальный» список, когда вы изменяете его внутри вашего метода. Если вы хотите изменить копию списка, вам просто нужно сделать ее. В коде, который вызывает CopyTest1, вы можете создать новый список на основе вашего исходного списка:
public void CallsCopyTest1()
{
var originalList = new List<int>();
var newList = new List<int>(originalList);
var copyTest = new CopyTest1(newList); //Modifies newList not originalList
}
class CopyTest1
{
List<int> _myList = new List<int>();
public CopyTest1(List<int> l)
{
foreach (int num in l)
{
_myList.Add(num);
}
_myList.RemoveAt(0); // no effect on original List
}
}