2014-09-21 174 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) 

順便說一句。你的代碼不應該工作,因爲你不能修改列表在迭代期間