c # — полиморфизм Печать только 1 объекта класса из списка полиморфизмов

#c# #polymorphism

#c# #полиморфизм

Вопрос:

Как мне распечатать только 1 класс из моего списка полиморфизмов? Например, у вас есть список полиморфизмов в program.cs

 List<Person> personList = new List<Person>();

static void DisplayVisitor(List<Person> pList)
        {
            foreach (Person p in pList)
            {
                if (p.Equals(Visitor))
                    Console.WriteLine(p);
            }
        }
 

У меня есть классы резидентов и Посетителей в классе Person. Я уже создаю пару резидентов и посетителей, но как мне отобразить только посетителей из моего личного списка?
Как мне проверить наличие объекта Visitor внутри списка?

Ответ №1:

Вы можете использовать is operator, чтобы проверить, имеет ли p Visitor тип или нет.

Оператор is проверяет, совместим ли тип времени выполнения результата выражения с заданным типом.

 foreach (Person p in pList)
   {
         if (p is Visitor visitorObj)
              Console.WriteLine(visitorObj);   //I believe you have overridden `ToString()` method
   }
 

Ответ №2:

Используйте оператор is для проверки типа объекта

 if (p is Visitor v) // with type pattern
  Console.WriteLine(v);
 

Обратите внимание, что вы можете фильтровать список с помощью метода Linq OfType<T> , чтобы получать только элементы определенного типа:

 foreach(var v in pList.OfType<Visitor>())
   Console.WriteLine(v);
 

Ответ №3:

В дополнение к другим ответам вы можете использовать is следующим образом

     static void DisplayVisitor(List<Person> pList)
    {
        foreach (Person p in pList)
        {
            if (p is Visitor)
                Console.WriteLine(p);
        }
    }