public class Foo
{
public static List<long> myList = new List<long>() { 1,2,3 }
}
在另一种方法中:
var testList = Foo.myList;
如果我在最后一行放置一个断点并检查
testList
它会不时给我不同的长度。当我在
ToList()
上使用 Foo.myList
时,它似乎表现正确。但为什么?编辑:
我的问题是我进行了 ajax 调用 > 修改了
Foo.myList
> 新的 ajax 调用 > 再次获取了 Foo.myList
并得到了修改后的值。 最佳答案
共享状态的竞争条件。静态字段成员意味着有 一个 副本,因此如果您在代码中操作列表,它会更改为 使用该属性的所有 线程。 ToList()
起作用是因为它创建了列表的 副本 ,它不会改变原始列表,但请注意,如果对象是引用类型 ,则此副本 也指向与原始列表相同的对象。因此,更改副本中的引用类型也会更改原始列表中的值……但由于 long
是一种不适用于此处的值类型。
如果您希望您的列表是只读的 http://msdn.microsoft.com/en-us/library/e78dcd75.aspx
关于c# - List<long> 属性的不一致行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17392910/