将属性作为参数传递给方法

我知道标题可能更具描述性/更好的措辞,但这是我能想到的最好的。

目前我的课程有很多方法,如下所示:

private static void UpdateArtists() { artists.Clear(); foreach (AudioInfo entry in library_entries) { artists.Add(entry.Artist, entry); } } private static void UpdateAlbums() { albums.Clear(); foreach (AudioInfo entry in library_entries) { albums.Add(entry.Album, entry); } } private static void UpdateGenres() { genres.Clear(); foreach (AudioInfo entry in library_entries) { genres.Add(entry.Genre, entry); } } private static void UpdateYears() { years.Clear(); foreach (AudioInfo entry in library_entries) { years.Add(entry.Year, entry); } } 

毋庸置疑,编写其中的数十篇非常烦人。 所以我想知道是否可以简化它并制作类似这样的方法:

  private static void Update(Dictionary dictionary, AudioInfo.Property property) { dictionary.Clear(); foreach (AudioInfo entry in library_entries) { dictionary.Add(entry.property, entry); } //Where "property" is a property in the AudioInfo-class. } 

这是可行的,如果是的话; 怎么样?

谢谢!

如果你需要做这些事情,你的class级似乎有一些设计错误。 然而,解决方案是:

 private static void Update(Dictionary dictionary, Func func) { dictionary.Clear(); foreach (AudioInfo entry in library_entries) { dictionary.Add(func(entry), entry); } } 

用法是:

 Update(years, x => x.Year); 

您也可以使用更简单的方法,而不是调用您可以编写的任何方法:

 years = library_entries.ToDictionary(x => x.Year, x => x); 

如果您没有任何与您的词典链接的事件。

还有一件事要做 – 你不能用相同的键添加不同的元素到字典。 在你的情况下,你似乎有不同的AudioInfo对象与同YearGenre