using System.Collections.Generic;
public int ID { get; set; }
public string Name { get; set; }
public char Gender { get; set; }
public override string ToString() => "{GetType()} {ID} {Name} {Gender}";
class Patient : Person { }
class Doctor : Person { }
static class FinderObject
public static T Find<T>(List<T> data, string Name)
=> data.FirstOrDefault(p => p.Name == Name);
public static class Program
static void Main(string[] args)
var docList = Enumerable.Range(1, 10)
.Select(n => new Doctor() { ID = n, Name = "Name{n}", Gender = 'D' })
var patientList = Enumerable.Range(100, 110)
.Select(n => new Patient() { ID = n, Name = "Name{n}", Gender = 'D' })
Doctor d = FinderObject.Find(docList, "Name3");
Patient x = FinderObject.Find(patientList, "Name99");
Console.WriteLine("Doc: {d}");
Console.WriteLine($"Pat: {(x != null ? x.ToString() : "No such patient")}");