C# 循环遍历数组,检查艺术家是否与用户输入的艺术家匹配,然后显示歌曲的详细信息

C# 循环遍历数组,检查艺术家是否与用户输入的艺术家匹配,然后显示歌曲的详细信息,c#,arrays,C#,Arrays,我创建了一个foreach循环,以便它遍历数组的每个项。我曾尝试在if语句中添加内容,但我尝试的似乎都没有编译iv'e尝试在songs'getartist中添加内容,但这不起作用,因为这是一种方法 我需要检查艺术家是否与用户输入的艺术家匹配,或者如果用户在没有输入艺术家的情况下按return键,那么它应该显示歌曲的详细信息 我假设第二部分使用keyread函数,但我不完全确定如何使用它 class Program { static void Main(string[] args)

我创建了一个foreach循环,以便它遍历数组的每个项。我曾尝试在if语句中添加内容,但我尝试的似乎都没有编译iv'e尝试在songs'getartist中添加内容,但这不起作用,因为这是一种方法

我需要检查艺术家是否与用户输入的艺术家匹配,或者如果用户在没有输入艺术家的情况下按return键,那么它应该显示歌曲的详细信息

我假设第二部分使用keyread函数,但我不完全确定如何使用它

class Program
{
    static void Main(string[] args)
    {

        Song[] songs = new Song[4];
        for (int i = 0; i < songs.Length; i++)
        {
            songs[i] = InputSongDetails();
        }

        Console.WriteLine("Enter an artist name, or just press return for all artists");

        foreach (var song in songs)
        {
            if ()
            {

            }
        }

    }


    static Song InputSongDetails()
    {
        Console.WriteLine("What is the name of your song");
        string name = Console.ReadLine();

        Console.WriteLine("What is the artists name");
        string artist = Console.ReadLine();

        int records;
        Console.WriteLine("How many records did it sell");
        while (!int.TryParse(Console.ReadLine(), out records) || records < 0)
        {
            Console.WriteLine("That is not valid please enter a number");
        }
        return new Song(name, artist, records);
    }
}
类程序
{
静态void Main(字符串[]参数)
{
歌曲[]歌曲=新歌[4];
for(int i=0;i
歌曲课

class Song
{
    string name;
    string artist;
    int copiesSold;

    public Song(string name, string artist, int copiesSold)
    {
        this.name = name;
        this.artist = artist;
        this.copiesSold = copiesSold;
    }

    public Song()
    {
    }

    public string GetArtist()
    {
        return artist;
    }

    public string GetDetails()
    {
        return $"Name: {name} Artist: {artist} Copies Sold: {copiesSold},";
    }

    public string GetCertification()
    {
        if (copiesSold < 200000)
        {
            return null;
        }
        if (copiesSold < 400000)
        {
            return "Silver";
        }
        if (copiesSold < 600000)
        {
            return "Gold";
        }
        return "Platinum";
    }
}
class歌曲
{
字符串名;
弦乐艺术家;
int复印件;
公共歌曲(字符串名称、字符串艺术家、int copiesSold)
{
this.name=名称;
这个艺术家=艺术家;
this.copiesSold=copiesSold;
}
公歌()
{
}
公共字符串GetArtist()
{
回归艺术家;
}
公共字符串GetDetails()
{
return$“Name:{Name}艺术家:{Artist}已售出的拷贝:{copiesSold},”;
}
公共字符串GetCertification()
{
如果(副本数<200000)
{
返回null;
}
如果(副本数<400000)
{
归还“银币”;
}
如果(副本数<600000)
{
归还“黄金”;
}
返回“白金”;
}
}

我认为您应该使用ReadLine而不是ReadKey,它允许用户输入一个字符串,后跟enter

Console.WriteLine("Enter an artist name, or just press return for all artists");
var name = Console.ReadLine();

foreach (var song in songs)
{
    if (song.GetArtist() == name || name == "")
    {
        Console.WriteLine(song.GetDetails());
    }
}

你错过了几件事

首先,您需要从用户处读取艺术家名称

Console.WriteLine("Enter an artist name, or just press return for all artists");
var artist = Console.ReadLine();
然后你需要根据用户输入过滤歌曲列表

foreach (var song in songs)
{
   if (string.IsNullOrWhiteSpace(artist) || song.GetArtist().Equals(artist))
   {
    Console.WriteLine(song.GetDetails());
   }
}
顺便说一句,为了展示另一种方法,您也可以在这里使用Linq

var filteredList= songs.Where(song=>string.IsNullOrWhiteSpace(artist) || song.GetArtist().Equals(artist))
                       .Select(song=> song.GetDetails());
Console.WriteLine(string.Join(Environment.NewLine, filteredList));

因此,为了澄清:在您的
foreach
正文中,您应该-询问用户艺术家姓名-如果用户输入艺术家姓名,则显示当前儿子的艺术家是否匹配-如果用户将输入留空,显示当前歌曲的全部详细信息我是否理解正确?您的代码已经在读取输入,您正在询问如何读取输入?看起来你可以从一门基本的编程课程中获益,而不是仅仅有人给你答案。我试过这个,但问题是它无法编译成song.Artister