2014-09-21 107 views
0

我想这段代码如何尽量减少与if语句

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 2014-09-21 13:48:56

回答

2

你可以使用LINQ Where()对其进行过滤:

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

这会给你的所有元素,除了与song.ID

3

匹配ID使用LINQ

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

顺便说一句。你的代码不应该工作,因为你不能修改列表在迭代期间