我有这样的父类:
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。我希望这个说明让我明确指出......:)
答案 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();