使用 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"