我正试图编写一个Linq表达式来检查派生类中的属性,但该列表是由基类的成员组成的。下面的代码示例。以"var list"开头的Process方法的第二行没有编译,但我不确定应该使用什么语法使其有效?
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; }
}
如果您知道列表只有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
对象。