невозможно преобразовать из строки в объект - PullRequest
0 голосов
/ 22 мая 2019

Я делаю домашнее задание и не могу выполнить эту часть, где мне нужно посмотреть, содержится ли имя в очереди:

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!");
        }
    }
}

Я ожидаю, что оно покажет мне полную очередь (имя, bday, возраст)

1 Ответ

0 голосов
/ 22 мая 2019

Чтобы найти подходящего человека по имени, отфильтруйте свою очередь по имени, а затем найдите все оставшиеся совпадения. Возьмите первое совпадение и распечатайте его пользователю, предполагая, что в вашей очереди может быть только одно совпадение. Если бы person был классом вместо структуры, вы могли бы также просто использовать FirstOrDefault и проверить на нулевое значение, но со структурой это могло бы быть самым простым способом.

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!");
    }
}
...