2014-09-21 4 views
0

내가 코드어떻게 문

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

답변

2

당신이 그들을 필터링 LINQ Where()를 사용할 수 있습니다

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

이는 Btw는

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

LINQ

를 사용 song.ID

3

ID 일치를 제외하면 모든 요소를 ​​제공 할 것입니다. iteration 동안 List를 수정할 수 없으므로 코드가 전혀 작동하지 않아야합니다.