Помогите переписать код с помощью Linq
public class User
{
public string Name { get; set; }
public int Id { get; set; }
public int LastName { get; set; }
}
var UserList = new List<User>();
var NewUserList = new List<User>();
int i = 0;
foreach(var user in UserList)
{
if (i++ % 5 == 0)
{
NewUserList.Add(new User() { Id = 0,Name = "Иванов" });
}
NewUserList.Add(user);
}
Ну например так:
var NewUserList = UserList.SelectMany(
(u, idx) => idx % 5 == 0 ? new[] { new User() { Id = 0, Name = "Иванов" }, u } :
new[] { u }).ToList();
Ну или можно, например, подключить из nuget MoreLinq
и написать более изящно:
var NewUserList =
UserList.Batch(5)
.SelectMany(part => part.Prepend(new User() { Id = 0, Name = "Иванов" }))
.ToList();
Не знаю зачем вам это надо - выглядит сомнительно, ну да ладно. Отвечаю:
Не сделать в LINQ'е такого, по крайней мере так чтоб не сломать там нафиг мозг - и потом никто в этом без бутылки не разберется, так что сделаем немного иначе. (P.S. Ну как я и говорил - сделать можно как в ответе VladD - но читается это весьма худо, либо требует внешних зависимостей, что зачастую бывает излишним).
Вынесем лучше в метод-расширение с глаз долой (особенно если это будет вызываться больше одного раза) заодно сделаем функцию "ленивой", чтоб вообще по феншую:
public static class UserExtension
{
public static IEnumerable<User> InsertIvan5(this IEnumerable<User> list)
{
var i = 0;
foreach (var user in list)
{
if (i % 5 == 0)
{
yield return new User() { Id = 0, Name = "Иванов" };
}
yield return user;
i++; // Так читабельнее нежели инкремировать ее внутри условия.
// К черту эту сишную магию.
}
}
}
В таком случае в коде будет вызываться так:
var NewUserList = UserList.InsertIvan5();
Опять же имя функции лучше как-нибудь более вразумительное дать - ну тут уж вы сами. Технически - очень похоже на LINQ
так же можно заключать в цепочки со стандартными LINQ
функциями и даже можно цепочку из этих самых функций нагородить. В LINQ тоже многое на методах-расширениях держится, а внутри зачастую никакой магии - все те же циклы и коллекции.
var userList = new List<User>();
// ... заполняем юзеров
int i = 0;
var newUserList = new List<User>();
userList.ForEach(x =>
{
if((i++ % 5)==0) {
newUserList.Add(new User() { Id = 0,Name = "Иванов" });
}
newUserList.Add(x);
});
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть звонилка, внизу у нее постоянно реклама висит, что раздражаетВозникла идея не блочить сервер рекламы, а просто обрезать снизу, либо серый...