using System.Collections.Generic;
string input = "Teacher";
Type inputType = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(t => t.Name == input);
throw new ArgumentOutOfRangeException(nameof(input), "It must be Student or Teacher.");
var listOfPersons = PersonProvider.AvailablePersons.Where(p => p.GetType() == inputType)
foreach (var item in listOfPersons)
Console.WriteLine(item.Name);
public abstract class Person {
public string Name { get; set; }
public class Student : Person {
public string ClassName { get; set; }
public class Teacher : Person {
public decimal Salary { get; set; }
public static class PersonProvider {
public static IEnumerable<Person> AvailablePersons => new List<Person>()
new Student() { Name = "Student 1", ClassName = "A" },
new Student() { Name = "Student 2", ClassName = "A" },
new Student() { Name = "Student 3", ClassName = "A" },
new Student() { Name = "Student 4", ClassName = "B" },
new Student() { Name = "Student 5", ClassName = "C" },
new Teacher() { Name = "Teacher 1", Salary = 40000m },
new Teacher() { Name = "Teacher 2", Salary = 42000m },