Я так понимаю, ваши типы данных симеларны, но не идентичны, верно? Наследуют ли они от одного и того же родителя - или, может быть, стоит заставить их наследовать от одного и того же родителя (если это приносит какие-то другие преимущества). Затем вы можете создать новый временный список, набранный с общим родителем, и объединить оба списка.
При обращении к списку с различными типами данных, при обращении к необычному датамеру необходимо проверить тип текущего элемента.
Классы:
abstract internal class EmergencyEmployees
{
internal string Name { get; set; }
internal int Age { get; set; }
}
internal class Police : EmergencyEmployees
{
internal int PoliceLicence { get; set; }
}
internal class Firestarter : EmergencyEmployees
{
internal int FirestarterLicence { get; set; }
}
Программа:
class Program
{
static void Main(string[] args)
{
var officers = new List<Police>();
var firestarters = new List<Firestarter>();
officers.Add(new Police { Name = "Kjell", Age = 45, PoliceLicence = 12345 });
officers.Add(new Police { Name = "Linda", Age = 42, PoliceLicence = 54321 });
firestarters.Add(new Firestarter { Name = "Arne", Age = 32, FirestarterLicence = 4322 });
firestarters.Add(new Firestarter { Name = "Anna", Age = 35, FirestarterLicence = 3322 });
var templist = new List<EmergencyEmployees>();
templist.AddRange(officers);
templist.AddRange(firestarters);
foreach(var ee in templist)
{
Console.WriteLine("Name: " + ee.Name);
Console.WriteLine("Age: " + ee.Age.ToString());
if(ee is Police)
{
var p = ee as Police;
Console.WriteLine("Police Licence: " + p.PoliceLicence.ToString());
}
if (ee is Firestarter)
{
var p = ee as Firestarter;
Console.WriteLine("Firestarter Licence: " + p.FirestarterLicence.ToString());
}
Console.WriteLine("--------------------");
}
}
}
Вывод: