在方法中传递属性作为参数

本文关键字:参数 属性 方法 | 更新日期: 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等。