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/

10-09 02:00