在方法中传递属性作为参数
本文关键字:参数 属性 方法 | 更新日期: 2023-09-27 18:01:45
我知道标题可能更有描述性/措辞更好,但这是我能想到的最好的。
目前我有一个类有很多方法看起来像下面的:
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<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.
}
这是可行的,如果是;如何?
谢谢!
如果你需要做这样的事情,你的类似乎有一些设计错误。然而,解决方案是:
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);
}
}
的用法是:
Update(years, x => x.Year);
你也可以使用更简单的方法,而不是调用任何方法,你可以直接写:
years = library_entries.ToDictionary(x => x.Year, x => x);
如果您没有任何事件,请与您的字典链接。
还有一件事要做——你不能用相同的键向字典中添加不同的元素。在你的情况下,似乎你有不同的AudioInfo
对象与相同的Year
, Genre
等。