2016-11-08 4 views
2

Я хочу, чтобы обновить все строки в списке, которые не начинаются с «HTTP: //», чтобы начать с «HTTP: //»Условные строки обновления в коллекции с LINQ

В виде Еогеасп я бы делать что-то вроде этого:

url = url.StartsWith("http://") ? url : url.Insert(0, "http://");

+2

Linq не предназначена для мутирует Коллекция. Вы можете использовать его для создания новой коллекции, но вы можете просто использовать цикл foreach для этого. – juharr

+1

Linq предназначен для _querying_, а не _updating. Нет ничего плохого в использовании 'foreach' для действий с побочными эффектами. –

+1

@DStanley: 'foreach' здесь было бы не очень полезно, тогда как прямой цикл' for' был бы. –

ответ

9

Просто используйте обычный for цикл - это самый простой способ модификации коллекции:

for (int i = 0; i < list.Count; i++) 
{ 
    string url = list[i]; 
    if (!url.StartsWith("http://")) 
    { 
     list[i] = "http://" + url; 
    } 
} 

Если вы счастливы, чтобы создать новый коллекции, это просто:

var modifiedList = list.Select(url => url.StartsWith("http://") ? url : "http://" + url) 
         .ToList(); 
2
yourlist.Where(_ => !_.StartsWith("http://")).ToList().ForEach(_ => _.Insert(0, "http://")); 
1

Другой способ сделать это с помощью Union является:

var result = 
    list.Where(url => url.StartsWith("http://")) 
     .Union(list.Where(url => !url.StartsWith("http://")).Select(url => $"http://{url}")) 
     .ToList(); 
Смежные вопросы