gpt4 book ai didi

C# select 不改变数组的值

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

任何人都可以向我解释为什么这段代码会更改 Matrix 内部数组:

    public Labyrinth(int width, int height)
{
baseMatrix = new char[width][];

for (int i = 0; i<baseMatrix.Length; ++i)
{
baseMatrix[i] = new char[height];
}

mod(baseMatrix[0]);
}

void mod(char[] x)
{
x[0] = 'a';
}

这并没有改变任何东西:

    public Labyrinth(int width, int height)
{
baseMatrix = new char[width][];

for (int i = 0; i<baseMatrix.Length; ++i)
{
baseMatrix[i] = new char[height];
}

baseMatrix.Select(x => x[0] = 'a');
}

我不明白,select 和函数都采用 char[] 元素,我认为这是为值传递的,那么在这两种情况下都应该修改 x[0],我哪里错了?

最佳答案

原因是您还没有具体化 Select 调用的结果。最后一行代码只是一个惰性求值表达式。由于从未请求过它的值,因此尚未执行表达式,因此未对数组进行任何修改。

您必须执行某些操作,例如调用 ToList(),以强制对表达式求值。

baseMatrix.Select(x => x[0] = 'a').ToList();

附带说明一下,您真的应该避免以这种方式做事。 LINQ 运算符旨在无副作用,在 Select 调用中设置数组内容可能会导致错误。

关于C# select 不改变数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48976536/

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