public class Foo
{
public static List<long> myList = new List<long>() { 1,2,3 }
}
Run Code Online (Sandbox Code Playgroud)
在另一种方法:
var testList = Foo.myList;
Run Code Online (Sandbox Code Playgroud)
如果我在最后一行放置断点并检查testList它会不时给我不同的长度.
当我使用ToList()上Foo.myList似乎正常运行.但为什么?
编辑:
我的问题是我做了一个ajax调用>修改Foo.myList>新的ajax调用> Foo.myList再次获取并获得修改后的值.
共享状态下的竞争条件.静态字段成员意味着有一个副本,因此如果您操作代码中的列表,它将使用该属性更改所有线程.ToList()工作,因为它会创建一个副本,不会改变原来的名单列表,但要注意,这个副本也指向同一对象的原始列表如果对象是引用类型.因此,更改副本中的引用类型也会更改原始列表中的值...但是,因为这long是一个不适用于此处的值类型.
如果您希望列表是只读的http://msdn.microsoft.com/en-us/library/e78dcd75.aspx