Passing Value Type parameters to functions in c# is by value unless you use the ref or out keyword on the parameter. But does this also apply to Reference Types?
Sp
your list is passed by reference. If you want to pass a copy of the list you can do:
IList clone = new List(list);
if you add/remove elements in clone it won't modify list but the modifications of the elements themselves will be taken into account in both lists.