2013-10-01 2 views
2

Имея этот код:Как получить текущую итерацию метода Enumerable.Repeat

return Enumerable.Repeat<MyClass>(new MyObject 
    { 
    Iteration = // Get the current loop index 
    }, 
    10).ToList<MyClass>(); 

    public MyClass 
    { 
    public int Iteration {get;set;} 
    } 

Как я могу установить индекс текущего цикла в свойстве Iteration с помощью метода Enumerable.Repeat?

+0

Обратите внимание, что Enumerable.Repeat() используется для возврата одного и того же объекта n раз. Похоже, вы хотите создать новый объект 10 раз. – drch

+0

Да, да. Но с другой ценностью. – anmarti

ответ

11

Вы можете использовать вместо:

int count = 10; 
List<MyObject> objects = Enumerable.Range(0, count) 
    .Select(i => new MyObject { Iteration = i }) 
    .ToList(); 
1

Если вы хотите, чтобы получить порядковый номер текущего элемента, один из способов заключается в использовании Selectoverload, что обнажает индекс. Вы можете создать что-то вроде анонимного типа для хранения содержимого исходного Enumerable (в данном случае, ваш Repeat результат) и индекс:

var repeats = Enumerable.Repeat("Something", 10).Select((s, i) => new { s, i }); 

foreach (var rep in repeats) 
    Console.WriteLine(rep.i + rep.s); 

распечаток:

0Something 
1Something 
... 
9Something 

Я не конечно, для чего вам это нужно. Если просто создать список объектов, альтернатива Тима лучше подходит (хотя теоретически это также будет работать).

Смежные вопросы