【问题标题】:In c# how do you compare a child type with the reference of its parent?在 C# 中,如何将子类型与其父类型的引用进行比较?
【发布时间】:2021-06-21 08:11:57
【问题描述】:

详细来说,我有多个子类的列表及其父类的引用。 喜欢 -->

List<Parent> p = new List<Parent>();
Parent c1 = new Child1();
Parent c2 = new Child2();
p.Add(c1);
p.Add(c2);

所以,当我遍历 p 列表时,如何比较列表中的对象是否来自一个特定的子类。 比如我想比较一下,

p[i] == Child1, then do stuff//

【问题讨论】:

标签: c#


【解决方案1】:

您可以使用is 来检查p[i] 是否属于特定类型,例如:

if (p[i] is Child1) {
   // Do something
}

如果您需要对对象进行操作,您可以使用is(感谢@Jonathan Barclay)获取对该对象的引用作为其类型,并且可以将您的代码更改为:

if (p[i] is Child1 c1) {
   // Do something with c1
}

【讨论】:

    【解决方案2】:

    你可以在 switch 语句中使用pattern matching in C#7

    switch(p[i])
    {
        case Child1 child1:
            /* ... */
            Console.WriteLine(child1.propert1);
            break;
        case Child2 child1:
            /* ... */
            Console.WriteLine(child2.propert2);
            break;
        default:
            /* ... */
            Console.WriteLine("No known child!");
            break;
    }
    

    【讨论】:

    • 这仍然是一个 switch 语句,而不是一个 switch 表达式。 (开关表达式是在 C# 8 中引入的)。您所展示的是 C# 7 中引入的 模式匹配,尤其是 类型模式。它们并不特定于 switch 语句或表达式 - 你可以只使用 if (p[i] is Child1 child) { ... } - 所以切换。
    • @JonSkeet 哎呀。谢谢,我已经更正了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2010-12-30
    • 1970-01-01
    • 2021-08-24
    • 2018-11-08
    • 2013-11-10
    • 2023-03-16
    相关资源
    最近更新 更多