Вопрос: Выражение Linq над списком производных типов


Я пытаюсь написать выражение Linq, которое проверяет свойство в производном классе, но список состоит из членов из базового класса. Пример кода ниже. Вторая строка метода Process, начинающаяся с «var list», не компилируется, но я не уверен, какой синтаксис я должен использовать, чтобы сделать ее действительной?

public class Manager
{
    public void Process()
    {
        Base[] stuff = { new Derived() { Id = "1", Name = "me" } };

        var list = stuff.Where<Derived>(d => d.Name == "me");
    }
}

public class Base
{
    public string Id { get; set; }
}

public class Derived : Base
{
    public string Name { get; set; }
}

4


источник


Ответы:


Если вы знаете, что список имеет только Derived, вы можете использовать Cast<T> метод:

var list = stuff.Cast<Derived>().Where(d => d.Name == "me");

Если есть некоторые   Derived, вы можете использовать OfType<T>:

var list = stuff.OfType<Derived>().Where(d => d.Name == "me");

В этом случае не- Derived объекты будут пропущены.


7