为了账号安全,请及时绑定邮箱和手机立即绑定

从铸造类中获取原始类

从铸造类中获取原始类

C#
蛊毒传说 2022-12-24 14:53:06
例如,我有三个类:Animal,Dog和Cat; whereAnimal是一个抽象类并将其属性继承给Dog和Cat。在我的程序中,我有一个用户可以输入的任意列表(我在 C# Form 上这样做)。因此,我将所有输入(无论它们是类Cat还是Dog)存储到我的List<Animal>.现在我想从中检索所述实例化类List<Animal>并检索其原始类,无论是 aCat还是 a Dog。有没有办法做到这一点?
查看完整描述

3 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

在最新的 C# 中你可以这样做:


Animal animal;

if (animal is Cat cat)

{

   cat.Meow();

}


查看完整回答
反对 回复 2022-12-24
?
米脂

TA贡献1836条经验 获得超3个赞

using System.Collections.Generic;

using System.Linq;


namespace ConsoleApp

{

    class Program

    {

        static void Main(string[] args)

        {

            List<Animal> animals = new List<Animal> { new Cat(), new Cat(), new Dog(), new Cat(), new Dog() };


            var dogs = animals.OfType<Dog>().ToList();

            dogs.ForEach(dog => dog.Bark());


            var cats = animals.OfType<Cat>().ToList();

            cats.ForEach(cat => cat.Meow());


            var actualTypes = animals.Select(animal => animal.GetType()).ToList();

        }


        abstract class Animal { }


        class Dog : Animal { public void Bark() { } }


        class Cat : Animal { public void Meow() { } }

    }

}


查看完整回答
反对 回复 2022-12-24
?
慕沐林林

TA贡献2016条经验 获得超9个赞

您可以使用GetType获取类的类型。

List<Animal> lstA = new List<Animal>();

        lstA.Add(new Cat());

        lstA.Add(new Dog());

        foreach(Animal a in lstA)

        {

            Console.WriteLine("Type of {0}", a.GetType());

        }


abstract class Animal

{}

class Cat : Animal

{}

class Dog : Animal

{}


查看完整回答
反对 回复 2022-12-24
  • 3 回答
  • 0 关注
  • 72 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信