public class Parent
{
public int ID { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public int ID { get; set; }
}
我有
IEnumerable<Parent> parent= items1;
IEnumerable<Child> child= items2;
尝试
parent.Concat(child);
仅返回父实例。我想要父母和孩子的合并列表,天气它是否存在于父层次结构中。
答案 0 :(得分:0)
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return String.Format("({0}) {1}", this.Id, this.Name);
}
}
public class Child : Person
{
public int Grade { get; set; }
public override string ToString()
{
return String.Format("({0}) {1} - {2}", this.Id, this.Name, this.Grade);
}
}
public static void Main()
{
IEnumerable<Person> persons = Enumerable.Range(0, 3).Select(i => new Person()
{
Id = i,
Name = "Person " + i.ToString(),
});
IEnumerable<Child> children = Enumerable.Range(0, 4).Select(i => new Child()
{
Id = i,
Name = "Child " + i.ToString(),
Grade = i+6,
});
foreach (var x in persons.Concat(children))
{
Console.WriteLine(x);
}
}
运行程序产生了以下输出:
(0)人0
(1)人1
(2)人2
(0)孩子0 - 6
(1)孩子1 - 7
(2)孩子2 - 8
(3)3 - 9岁儿童
请注意,虽然连接包含原始项,因此父项和子项,迭代器只知道Person函数。除非您首先检查它是否是孩子并将其投射给孩子,否则不能调用任何子功能。
如示例程序所示,虚拟函数不需要这样,因为虚函数是Person函数。调用实际对象的实现:当它是Child时,调用子函数。这是虚函数的正常行为。