gpt4 book ai didi

c# - 从基类对象列表中识别派生类型

转载 作者:太空狗 更新时间:2023-10-29 22:24:58 25 4
gpt4 key购买 nike

这可能看起来有点像“家庭作业”和/或微不足道,但它是出于真正的商业目的;这只是我能想到的最简单的方法来解释我在概念上试图做的事情。

假设我有一个动物类和其他一些类(鸟、猫、袋鼠)。这些中的每一个都继承自 Animal。

动物可能看起来像这样:

public class Animal
{
public Animal()
{

}

public string Name { get; set; }
public string AnimalType { get; set; }
public List<Animal> Friends { get; set; }
}

袋鼠可能看起来像这样:

public class Kangaroo : Animal
{
public Kangaroo()
{

}

public int TailLengthInches { get; set; }
}

假设袋鼠有两个 friend ,一只鸟和一只猫。我如何将它们添加到“Animal” friend 列表(作为 Animal 类型),但保留访问派生类属性的能力? (例如,我仍然需要能够处理特定于动物类型的属性,例如鸟的 FeatherColor,即使它们将被视为只是“动物”。

我尝试这样做的原因是,当我稍后获得动物“ friend ”的列表时,知道 friend 是什么类型的动物是至关重要的。根据动物类型(无论是鸟、猫等),我想做一些不同的事情(实际上,在 ASP.NET 页面上显示不同的模板,但我不需要具体的帮助)。

我想这可以归结为...如果我有一个 Animal 列表,我怎么知道列表中每个对象的派生类型是什么,所以我可以将它们转换回它们的派生类型或做一些其他的事情来让我获得每个派生类型的特定的、不同的属性?

谢谢!

最佳答案

您可以使用 LINQ 来过滤您要查找的类型

animals.Friends = new List<Animal> { new Kangaroo(), new Bird() };
foreach ( var kangaroo in animals.Friends.OfType<Kangaroo>()) {
kangaroo.Hop();
}

关于c# - 从基类对象列表中识别派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2074779/

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