gpt4 book ai didi

c# - 通过另一个线程将局部变量修改为 null,这怎么可能

转载 作者:太空狗 更新时间:2023-10-29 20:59:06 25 4
gpt4 key购买 nike

当我处理我们框架的并行性时,我遇到了一个奇怪的情况,我无法想象为什么!我简化了情况来描述它。考虑这段代码:

foreach(var person in personList)
{
if (person.Name == "Mehran")
break;
}

personList 在多个线程之间共享。

在什么情况下 person 可能为 null 而我得到 NullReferenceException for person.Name?

据我所知,person 在这里被视为局部变量,如果我们进入 foreach block ,那么我们已经成功地迭代了 personList,所以 person 在任何情况下或任何并行情况下都不应为 null。

即使 personList 被另一个线程更改,或者引用的 person 被释放,person 变量也应该有一个值。因为没有人有权更改引用 person 的位置。

有没有什么场景可以说明情况?

最佳答案

As I know, the person is considered as a local variable here and if the we get into the foreach block, so we have iterated the personList successfully, so person should not be null in any circumstances or any parallel scenario.

仅仅因为您成功地迭代了 personList 并不意味着它不包含任何空值。例如:

List<Person> personList = new List<Person>();
personList.Add(null);

foreach (var person in personList)
{
// Here, person will be null
}

(此外,如果 任何东西 正在修改列表,您通常会有麻烦 - 它们在编写器面前不是线程安全的 - 但我认为这不需要问题的一部分。)

关于c# - 通过另一个线程将局部变量修改为 null,这怎么可能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13729213/

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