如何从C#中的父级知道子类型

时间:2016-07-14 05:38:10

标签: c#

我有这样的父类:

    class Alien
        {
            public String Name { get; set; }
            public bool IsAlive { get; set; }
            public Alien Parent { get; set; }
            public List<Alien> Children { get; set; }
            private bool statusGet
            public Alien(String name, bool isAlive, Alien parent = null)
            {
                Name = name;
                IsAlive = isAlive;
                Parent = parent;
                statusGet = false;
            }
           public void GiveBirth(IEnumerable<Alien> children)
            {
              if (Children == null)
                {
                   Children = new List<Alien>();
                }
                Children.AddRange(children);
          }

         public Alien Find(String name)
          {
           //some programming stuff

          }

    }

然后我有两个继承外星人的子类:

class BadAlien : Alien
    {
        int Kills { get; set; }
        public BadAlien(String name, bool isAlive, int kills, Alien parent = null)
            : base(name, isAlive, parent)
        {
            Kills = kills;
        }

    }



class GoodAlien:Alien
    {
        int Saves { get; set; }
        public GoodAlien(String name, bool isAlive, int saves, Alien parent = null)
            : base(name, isAlive, parent)
        {
            Saves = saves;
        }

    }

然后在myProgram中,我正在制作一个外星物体:

class Program
    {
        static void Main(string[] args)
        {
            Alien theFirstAlienEver = new Alien("Ace", false);
            theFirstAlienEver.GiveBirth(new List<Alien> { 
                new BadAlien("Bruce", true, 12),
                new GoodAlien("Bane", true, 3),
                new GoodAlien("Bill", false, 5)
            });
            theFirstAlienEver.Find("Bruce").GiveBirth(new List<Alien> { 
                new BadAlien("Charles", true, 15),
                new BadAlien("Cain", true, 17),
                new GoodAlien("Curt", false, 6)
            });
            theFirstAlienEver.Find("Bill").GiveBirth(new List<Alien> { 
                new GoodAlien("Christine", true, 2),
                new BadAlien("Connor", true, 11),
                new BadAlien("Chloe", false, 16)
            });
            theFirstAlienEver.Find("Connor").GiveBirth(new List<Alien> { 
                new GoodAlien("Daniel", true, 4),
                new BadAlien("Dylan", true, 12),
            });

}
}
}

所以我有一个带有一些孩子的物体。现在从第一个AlienEver对象我想知道哪个是BadAlien或GoodAlien来自它的孩子,所以如何实现这个... ???非常感谢.. ..)

注意: 我想创建一个json字符串,但是当访问它的孩子时,我无法定义它的tipe,无论是BadAlien还是GoodAlien。我希望这个说明让我明确指出......:)

2 个答案:

答案 0 :(得分:2)

您可以使用is关键字:

  

如果提供的表达式为表达式的计算结果为true   非null,并且可以将提供的对象强制转换为提供的类型   没有引起异常抛出。

foreach (var child in theFirstAlienEver.Children)
{
    if (child is GoodAlien)
    {
        // do something
    }
    else if (child is BadAlien)
    {
        // do something
    }
}

答案 1 :(得分:1)

List<BadAlien> badAliens = theFirstAlienEver.Children.OfType<BadAlien>().ToList();
List<GoodAlien> goodAliens = theFirstAlienEver.Children.OfType<GoodAlien>().ToList();