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

C# 如何使用if语句最小化循环,c#,loops,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 (dese

我试图最小化这段代码

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);
}
publicstaticvoidunfavsong(宋歌)
{
列表收藏夹=文件管理.GetFileContent\u列表(FAVS\u文件名);
foreach(收藏夹中的字符串s)
{
Song deser=SongSerializer.Deserialize(个);
if(desr.ID==song.ID)
{
收藏。删除;
打破
}
}
FileManagement.SaveFile(FAVS_文件名,收藏夹);
}
但我觉得整个
foreach
部分可以缩短很多。
在C语言中有没有一种方法可以将其精简到核心部分?

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

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

这将为您提供除与
ID
匹配的
song.ID
之外的所有元素。您可以使用linq
Where()
对其进行过滤:

List<string> result = favorites.Where(x=>SongSerializer.Deserialize(x).ID != song.ID).ToList(); 
List result=favorites.Where(x=>SongSerializer.Deserialize(x.ID!=song.ID).ToList();
这将为您提供所有元素,但使用LINQ的
ID
song.ID

匹配的元素除外

favorites.RemoveAll(s => SongSerializer.Deserialize(s).ID == song.ID)
顺便说一句,您的代码根本不应该工作,因为您不能在列表的迭代过程中使用LINQ修改列表

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

顺便说一句,您的代码根本不应该工作,因为您不能在列表的迭代过程中修改列表

使用linq,您可以最小化foreach循环。但是,在对列表进行迭代时修改列表(例如从列表中删除项目)通常不是一个好主意。但是,在遍历列表时修改列表(例如,从列表中删除项目)通常是个坏主意。