gpt4 book ai didi

c# - 奇怪的内联数组初始化

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

我在另一篇我不太明白的帖子上发现了这段代码片段,希望有人能解释一下。

private bool[] GetPageNumbersToLink(IPagedResult result)
{
if (result.TotalPages <= 9)
return new bool[result.TotalPages + 1].Select(b => true).ToArray();

...

C# Array initialization - with non-default value

我对此的看法:

new bool[result.TotalPages + 1]

这将创建一个长度等于总页数的 bool 数组,所有这些的默认值为 false。

.Select(b => true)

这使用 linq 查询只返回为真的项目,即没有一个

.ToArray();

linq 返回 IEnumerable 或其他东西,因此它需要返回一个长度为 0 的新数组,因为首先没有选择任何数组。

我认为这就是它正在做的事情,但它没有任何意义。

最佳答案

(编辑:糟糕,误读了帖子(除非它是在我没有注意到的情况下编辑的)。)

不,这不是它正在做的。结果是有效的:

Enumerable.Repeat(true, result.TotalPages + 1).ToArray();

Select 调用完全不依赖于它选择的值——它只是返回 true 无论输入是什么。 Select 不执行过滤,只执行投影。

换句话说:

// Array filled with (result.TotalPages + 1) x false
new bool[result.TotalPages + 1]

// Sequence of length (result.TotalPages + 1) x true
.Select(b => true)

// Array filled with (result.TotalPages + 1) x true
.ToArray();

总之效率低下。不幸的是,.NET 有时不提供类似的东西:

public static T[] CreateFilledArray<T>(T value, int size)
{
T[] ret = new T[size];
for (int i=0; i < size; i++)
{
ret[i] = value;
}
return ret;
}

关于c# - 奇怪的内联数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1285238/

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