我正在做作业,我无法在需要查看队列中是否包含名称的地方做这部分:
public struct person
{
public string name;
public string bday;
public int age;
}
class Program
{
static void Main(string[] args)
{
person personaStruct = new person();
Queue<person> personQueue = new Queue<person>();
Console.WriteLine("Type a name");
personStruct.name = Console.ReadLine();
if (personQueue.Contains(personStruct.name))
{
Console.WriteLine(personStruct.name);
Console.WriteLine(personStruct.bday);
Console.WriteLine(personStruct.age);
}
else
{
Console.WriteLine("Doesn't exist!");
}
}
}
我希望它可以向我显示完整的队列(姓名,生日,年龄)
答案 0 :(得分:0)
要按名称查找匹配的人,请按名称过滤队列,然后查找任何剩余的匹配项。假设队列中只有一个匹配项,则将第一个匹配项打印给用户。如果person
是类而不是struct,则也可以只使用FirstOrDefault
并检查是否为null,但使用struct可能是最简单的方法。
var matchingPeopele = personQueue.Where(p => p.name == personStruct.name);
if (matchingPeopele.Any())
{
var match = matchingPeopele.First();
Console.WriteLine(match.name);
Console.WriteLine(match.bday);
Console.WriteLine(match.age);
}
else
{
Console.WriteLine("Doesn't exist!");
}
关于您的评论,您的老师尚未覆盖LINQ,这是另一个版本。至此,我基本上正在为您做功课,但是在尝试代码时,请尽最大努力真正了解正在发生的事情。
static void Main(string[] args)
{
person personStruct = new person();
Queue<person> personQueue = new Queue<person>();
Console.WriteLine("Type a name");
personStruct.name = Console.ReadLine();
var personFound = false;
foreach(var p in personQueue)
{
if (p.name == personStruct.name)
{
personFound = true;
Console.WriteLine(p.name);
Console.WriteLine(p.bday);
Console.WriteLine(p.age);
break;
}
}
if (!personFound)
{
Console.WriteLine("Doesn't exist!");
}
}