gpt4 book ai didi

c# - 在方法中将属性作为参数传递

转载 作者:太空狗 更新时间:2023-10-29 22:12:48 28 4
gpt4 key购买 nike

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

目前我有一个包含很多方法的类,如下所示:

        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 对象,它们具有相同的 YearGenre

关于c# - 在方法中将属性作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6640302/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com