我知道标题可能更具描述性/更好的措辞,但这是我能想到的最好的.
目前我的课程有很多方法,如下所示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
毋庸置疑,编写其中的数十篇非常令人厌烦.所以我想知道是否可以简化它并制作一个类似这样的方法:
private static void Update(Dictionary<string, AudioInfo> 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.
}
Run Code Online (Sandbox Code Playgroud)
这是可行的,如果是的话; 怎么样?
谢谢!
oxi*_*min 15
如果你需要做这些事情,你的班级似乎有一些设计错误.然而,解决方案是:
private static void Update(Dictionary<string, AudioInfo> dictionary, Func<AudioInfo, string> func)
{
dictionary.Clear();
foreach (AudioInfo entry in library_entries)
{
dictionary.Add(func(entry), entry);
}
}
Run Code Online (Sandbox Code Playgroud)
用法是:
Update(years, x => x.Year);
Run Code Online (Sandbox Code Playgroud)
您也可以使用更简单的方法,而不是调用您可以编写的任何方法:
years = library_entries.ToDictionary(x => x.Year, x => x);
Run Code Online (Sandbox Code Playgroud)
如果您没有任何事件,请与您的词典链接.
还有一件事要做 - 你不能用相同的键添加不同的元素到字典.在你的情况下,你似乎有不同的AudioInfo对象Year,Genre等等