听起来您正在修改 Foo.myList 或某处对其的引用。请注意,将列表分配给局部变量不会复制。因此:
var list = new List<long> { 1, 2, 3 };
var testList = list;
testList.Add(4); // list is now [1, 2, 3, 4]
list.Add(5); // testList is now [1, 2, 3, 4, 5]
另一方面,ToList() 会进行复制。一般来说,将任何静态列表设为只读(如果这是您想要的语义)可能是最安全的,以防止这种情况意外发生:
public class Foo {
// pre .NET 4.5, use ReadOnlyCollection<T> (which implements IList<T>)
public static readonly IReadOnlyList<long> myList = new List<long> { 1, 2, 3 }.AsReadOnly();
}
var testList = Foo.myList.ToList(); // get an editable copy
var testList2 = Foo.myList; // get a reference to the immutable static list