使用 IEnumerable.Repeat 填充计数器
Using IEnumerable.Repeat to populate a counter
我想使用 Enumerable.Repeat 创建一个 IEnumerable 列表,并希望按照下面的代码将对象的 ID 设置为列表的 nth 元素. Enumerable.Repeat 是否可行,或者我需要做一些不同的事情吗?
var stuff = Enumerable.Repeat("This is element <n>", 50);
所以下面代码的结果输出...
foreach (var s in stuff)
{
Console.WriteLine(s);
}
...将是...
This is element 0
This is element 2
This is element 3
...
This is element 49
通常我使用 Enumerable.Range
来完成这样的任务:
var stuff = Enumerable.Range(0, 50)
.Select(i => new thing {id = i})
无法使用 Repeat
完成此任务,因为它完全按照它“承诺”的方式进行 - 多次重复完全相同的元素:
class thing{public int id;}
var counter = 0;
var stuff = Enumerable.Repeat(new thing { id = 1 }, 50)
.ToArray();
Console.WriteLine(object.ReferenceEquals(stuff[0], stuff[1])); // prints "True"
我想使用 Enumerable.Repeat 创建一个 IEnumerable 列表,并希望按照下面的代码将对象的 ID 设置为列表的 nth 元素. Enumerable.Repeat 是否可行,或者我需要做一些不同的事情吗?
var stuff = Enumerable.Repeat("This is element <n>", 50);
所以下面代码的结果输出...
foreach (var s in stuff)
{
Console.WriteLine(s);
}
...将是...
This is element 0
This is element 2
This is element 3
...
This is element 49
通常我使用 Enumerable.Range
来完成这样的任务:
var stuff = Enumerable.Range(0, 50)
.Select(i => new thing {id = i})
无法使用 Repeat
完成此任务,因为它完全按照它“承诺”的方式进行 - 多次重复完全相同的元素:
class thing{public int id;}
var counter = 0;
var stuff = Enumerable.Repeat(new thing { id = 1 }, 50)
.ToArray();
Console.WriteLine(object.ReferenceEquals(stuff[0], stuff[1])); // prints "True"