gpt4 book ai didi

c# - 多态性运行时对象类型检查

转载 作者:太空宇宙 更新时间:2023-11-03 17:39:58 26 4
gpt4 key购买 nike

考虑以下类:

class A
{
public virtual string Name { get { return "A"; } }
}

class B : A
{
public override string Name { get { return "B"; } }
}

class C : A
{
public override string Name { get { return "C"; } }
}

还有一个包含两个 B 类型对象和一个 C 类型对象的列表:

List<A> l = new List<A>();
l.Add(new B());
l.Add(new C());
l.Add(new B());

是否有某种方法可以在运行时强制检查类型并仅迭代此列表中类型 B 的对象(缺少编写列表的自定义实现)?像这样的东西:

foreach (B obj in l)               // runtime error
Console.WriteLine(obj.Name);

// desired output:
// B
// B

我没有在项目中遇到过这个问题,但我刚刚想到这个想法,我很好奇是否可以做到这一点。我知道需要此功能可能表明存在设计缺陷。

最佳答案

您可以使用 .OfType<T>() :

foreach (B obj in l.OfType<B>())
Console.WriteLine(obj.Name);

如果你想要 B s,而不是 B 的任何子类要列出,您可以使用以下内容:

foreach (B obj in l.Where(o => o.GetType() == typeof(B)))
Console.WriteLine(obj.Name);

关于c# - 多态性运行时对象类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31792790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com