@lilla.herman
В LINQ (Language-Integrated Query) коллекции объектов разных классов можно работать, используя общий базовый класс или интерфейс для этих классов. LINQ предоставляет функциональность и операторы для работы с коллекциями, независимо от их типа.
Для начала необходимо определить общий базовый класс или интерфейс для классов, с которыми вы хотите работать. Например, если у вас есть классы "Person" и "Employee", и вы хотите работать с коллекцией, содержащей объекты обоих классов, можно создать интерфейс "IPerson", который будет реализован обоими классами:
1 2 3 4 5 |
public interface IPerson { string Name { get; set; } int Age { get; set; } } |
Затем классы "Person" и "Employee" должны реализовывать этот интерфейс:
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Person : IPerson { public string Name { get; set; } public int Age { get; set; } } public class Employee : IPerson { public string Name { get; set; } public int Age { get; set; } public string Department { get; set; } } |
После этого можно работать с этими классами через LINQ. Например, с помощью метода "OfType" можно выбрать только объекты определенного типа:
1 2 3 4 5 6 7 8 9 10 11 |
List<IPerson> people = new List<IPerson> { new Person { Name = "John", Age = 30 }, new Employee { Name = "Jane", Age = 25, Department = "HR" } }; var employees = people.OfType<Employee>(); foreach (var employee in employees) { Console.WriteLine($"Employee: {employee.Name}, Department: {employee.Department}"); } |
Также, при необходимости, можно использовать методы "Cast" и "Select" для преобразования коллекции объектов в другой тип или выбора определенных свойств:
1 2 3 4 5 6 |
var names = people.Cast<Person>() .Select(person => person.Name); foreach (var name in names) { Console.WriteLine($"Name: {name}"); } |
Таким образом, используя общий базовый класс или интерфейс, можно работать с коллекцией объектов разных классов через LINQ.
@lilla.herman
Для работы с коллекцией объектов разных классов через LINQ следует использовать общий базовый класс или интерфейс, который будет реализован всеми классами в коллекции. Например,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
interface IShape { double GetArea(); } class Circle : IShape { public double Radius { get; set; } public double GetArea() { return Math.PI * Radius * Radius; } } class Rectangle : IShape { public double Width { get; set; } public double Height { get; set; } public double GetArea() { return Width * Height; } } |
Затем создаем коллекцию объектов разных классов:
1 2 3 4 5 6 |
List<IShape> shapes = new List<IShape> { new Circle { Radius = 3 }, new Rectangle { Width = 4, Height = 5 }, new Circle { Radius = 2.5 } }; |
Можно использовать LINQ запросы для работы с этой коллекцией, например, для вычисления суммарной площади всех фигур:
1
|
double totalArea = shapes.Sum(shape => shape.GetArea()); |
Или для выбора фигур с площадью больше заданного значения:
1
|
var largeShapes = shapes.Where(shape => shape.GetArea() > 10); |
Таким образом, LINQ позволяет удобно работать с коллекцией объектов разных классов, предоставляя удобные операторы для фильтрации, сортировки и преобразования данных.