简体   繁体   中英

How to minimize loop with if statement

I am trying to minimize this piece of code

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);
}

But I feel like the whole foreach part can be made much shorter. Is there a way in C# to cut this down to the core?

Using LINQ

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

Btw. your code shouldn't work at all as you can't modify the List during it's iteration

you can use linq Where() to filter them:

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

This will give you all element except with the matching ID with song.ID

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM