gpt4 book ai didi

c# - List 属性的不一致行为

转载 作者:太空狗 更新时间:2023-10-30 00:15:05 25 4
gpt4 key购买 nike

public class Foo
{
public static List<long> myList = new List<long>() { 1,2,3 }
}

另一种方法:

var testList = Foo.myList;

如果我在最后一行放置一个断点并检查 testList,它会不时给我不同的长度。

当我在 Foo.myList 上使用 ToList() 时,它的行为似乎正确。但是为什么?

编辑:

我的问题是我进行了 ajax 调用 > 修改了 Foo.myList > 新的 ajax 调用 > 再次获取了 Foo.myList 并获得了修改后的值。

最佳答案

共享状态的竞争条件。静态字段成员意味着有一个 副本,因此如果您在代码中操作列表,它会针对使用该属性的ALL 线程发生变化。 ToList() 起作用是因为它创建了一个列表的副本,它不会改变原始列表,但请注意,这个副本也指向相同的对象如果对象是引用类型,则为原始列表。因此,更改副本中的引用类型也会更改原始列表中的值...但由于 long 是一种值类型,不适用于此处。

如果你希望你的列表是只读的http://msdn.microsoft.com/en-us/library/e78dcd75.aspx

关于c# - List<long> 属性的不一致行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17392910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com