#c#
#c#
Вопрос:
Возможно, я спрашиваю об этом только потому, что ослепил себя чем-то блестяще очевидным, но,
Я ищу что-то вроде этого…
IEnumerable<Foo> fooSeq = Enumerable.Generate(()=> new Foo(), 5);
что сделало бы fooSeq последовательностью из 5 новых экземпляров Foo.
Кажется, не могу его найти.
Ответ №1:
Не уверен, что именно вы пытаетесь сделать, но если вы пытаетесь сгенерировать 5 экземпляров Foo, это сработает
IEnumerable<Foo> fooSeq = Enumerable.Range(1, 5).Select(x => new Foo())
Комментарии:
1. круто ли писать больной код в 1 строку? обычный цикл for для заполнения списка элементов понятен и будет доступен для чтения вечно, а не в первые 2 дня после его написания. Также никто не спросил бы, хммм — почему он заполнил 5 Foo таким больным способом?
2. @Valentin Я согласен с вами во всем, что вы сказали, но ИМХО, linq очень удобочитаем, с ним очень легко ознакомиться. Чтобы достичь того же результата без linq, вам понадобится отдельная функция, выполняющая что-то вроде
for(int i=0;i<5;i ) yield return new Foo();
(IEnumerable — это не то же самое, что List), и это может повлиять на читаемость, так что это ситуативно, спорно, но в основном личные предпочтения.3. ну, ты говоришь, что согласен, но в то же время ты вроде как и не согласен. Этот код не так прост даже для людей, знакомых с Linq, и автор не смог написать его сам. Этого уже должно быть достаточно. И если вы спросите меня, я скажу, что это похоже на взлом. Если вы считаете, что List — это не то же самое, что inemurable, вы можете преобразовать его в IEnumerable или использовать HashSet или какую-либо другую коллекцию, которая подходит вам для этой цели. Конечно, List НЕ является IEnumerable, потому что он наследует этот интерфейс, но не могли бы вы уточнить, что именно вы имеете в виду, говоря, что ‘IEnumerable — это не то же самое, что List’?
4. Лично я предпочитаю
new object[5].Select(x => new Foo())
илиEnumerable.Repeat("", 5).Select(x => new Foo())
5. @misterfrb но чтобы использовать
new object[5]
метод, вам нужно создать массив… Если бы нам понадобился очень большой IEnumerable, вам пришлось бы тратить память на создание массива, который вы не используете.