2014-09-21 5 views
0

Я пытаюсь свести к минимуму этот кусок кодаКак минимизировать цикл с, если заявление

public static void UnfavSong(Song song) 
{ 
    List<string> favorites = FileManagement.GetFileContent_List(FAVS_FILENAME); 

    foreach (string s in favorites) 
    { 
     Song deser = SongSerializer.Deserialize(s); 
     if (deser.ID == song.ID) 
     { 
      favorites.Remove(s); 
      break; 
     } 
    } 

    FileManagement.SaveFile(FAVS_FILENAME, favorites); 
} 

Но я чувствую, что весь foreach часть может быть значительно короче. Есть ли способ в C#, чтобы сократить это до ядра?

+0

Используя linq, вы можете свести к минимуму цикл foreach. Но, как правило, плохая идея изменить список (например, удалить элементы из списка), итерации по нему. – user2588666

ответ

2

вы можете использовать LINQ Where() фильтровать их:

List<string> result = favorites.Where(x=>SongSerializer.Deserialize(x).ID != song.ID).ToList(); 

Это даст вам все элементы, за исключением с согласования ID с song.ID

3

Использование LINQ

favorites.RemoveAll(s => SongSerializer.Deserialize(s).ID == song.ID) 

Btw. ваш код не должен работать вообще, поскольку вы не можете изменять список во время его итерации.

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