【发布时间】:2017-03-17 07:53:36
【问题描述】:
我想将对象列表传递给 NavigationPage 的构造函数,以便我可以在该页面上填充 ListView 的内容。
对象将是不同的类型,它们都继承自同一个父类,这是一个名为“Animal”的抽象类,定义如下:
abstract class Animal { ...
继承的类是这样的:
public class Horse : Animal { ...
public class Cow : Animal { ...
public class Dog : Animal { ...
显示这个列表的页面是一个继承自 NavigationPage 的类,如下:
public List<Animal> Animals = new List<Animal>();
public AnimalListPage(string title, List<Animal> animals) {
....
我创建 AnimalListPage 对象如下:
var horses = new List<Horse>() {
new Horse("Silver", 65, 70),
new Horse("Tucker", 60, 68)
};
horsesListPage = new AnimalListPage("Horses", horses);
....
编辑:回应一些建议;澄清一下:我需要在列表中保留“马”、“牛”、“狗”等对象类型,因为每种动物类型都有要显示的唯一属性。此外,Animal List 的每个实例都只会有一种类型,即永远不会有一个组合了 Horses、Cows 和 Dogs 的列表。
但我得到了错误:
Error CS1503 Argument 2: cannot convert from System.Collections.Generic.List<AnimalTracker.Horse> to System.Collections.Generic.List<AnimalTracker.Animal>
我是否必须“投射”“马”列表才能以某种方式键入“动物”?或者使“AnimalListPage()”构造函数的类型不那么具体?我该怎么做?
注意:我正在使用 Xamarin 进行开发(尽管我认为这与此问题无关)。
【问题讨论】:
-
var horses = new List
() {... -
只要使用
var horses = new List<Animal>()
标签: c# list types constructor