如何使用if语句最小化循环

时间:2014-09-21 13:44:34

标签: c# loops

我正在尝试最小化这段代码

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#中是否有办法将其削减到核心?

2 个答案:

答案 0 :(得分:3)

使用LINQ

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

顺便说一下。您的代码根本不起作用,因为您无法在迭代期间修改List

答案 1 :(得分:2)

您可以使用linq Where()来过滤它们:

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

除了匹配IDsong.ID

之外,这将为您提供所有元素