gpt4 book ai didi

c# - 为什么从投影创建的整数变量不能递增?

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:35 25 4
gpt4 key购买 nike

我遇到了我没想到的 C# 的小众行为。幸运的是我的单元测试发现了意想不到的行为,但我很惊讶并且我不明白为什么它会这样。我用以下代码重现了这个问题。

static void Main(string[] args)
{
var initialCollection = new bool[] { false, true };
var projectedCollection = initialCollection.Select(o => (initialObj: o, Counter: 0)).ToArray();

for (int i = 0; i < 10; i++)
{
var objectFromProjection = projectedCollection.First(o => o.initialObj == (i % 2 == 0));
Console.WriteLine($"For initial obj {objectFromProjection.initialObj}, counter is now {++objectFromProjection.Counter}");
}

Console.ReadKey();
}

因为我在投影之后添加了 ToArray,所以我希望计数器变量不会每次都重新初始化为零。但是,对于循环 for 的每次迭代,它都会重新初始化为 0。

这是输出:

For initial obj True, counter is now 1
For initial obj False, counter is now 1
For initial obj True, counter is now 1
For initial obj False, counter is now 1
For initial obj True, counter is now 1
For initial obj False, counter is now 1
For initial obj True, counter is now 1
For initial obj False, counter is now 1
For initial obj True, counter is now 1
For initial obj False, counter is now 1

这是我认为它会做的:

For initial obj True, counter is now 1
For initial obj False, counter is now 1
For initial obj True, counter is now 2
For initial obj False, counter is now 2
For initial obj True, counter is now 3
For initial obj False, counter is now 3
For initial obj True, counter is now 4
For initial obj False, counter is now 4
For initial obj True, counter is now 5
For initial obj False, counter is now 5

为什么计数器会重置为零而不是保持增量值?

最佳答案

因为您正在处理一个 元组。观察:

for (int i = 0; i < 10; i++)
{
var objectFromProjection = projectedCollection.First(o => o.initialObj == (i % 2 == 0));

//Always false
Console.WriteLine(ReferenceEquals(projectedCollection[0], objectFromProjection));
Console.WriteLine(ReferenceEquals(projectedCollection[1], objectFromProjection));
}

关于c# - 为什么从投影创建的整数变量不能递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54223023/

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