派生类型列表上的 Linq 表达式

发布于 2024-11-09 03:16:42 字数 468 浏览 0 评论 0原文

我正在尝试编写一个 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; }
}

I am trying to write a Linq expression that checks against property in a derived class, but the list is made up of members from a base class. Example code below. The 2nd line of the Process method starting with 'var list' does not compile, but I am not sure what syntax I should use to make it valid?

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; }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

紫﹏色ふ单纯 2024-11-16 03:16:42

如果您知道列表只有 Derived,则可以使用 Cast 方法:

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

如果只有 some Derived< /code>,您可以使用 OfType

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

在这种情况下,非 Derived 对象将被跳过。

If you know the list has only Derived, you can use the Cast<T> method:

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

If there are only some Derived, you can use OfType<T>:

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

In that case, the non-Derived objects will be skipped.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文