我有一个显示几种小部件类型的应用程序。我将视图传递给基础抽象类GraphWidget。目标是遍历这些,并为每种类型的图形创建适当的显示。
我如何循环遍历该集合并从派生类中获取适当的信息,以便我的视图知道如何呈现每个小部件?
编辑这是一个.NET MVC5应用程序
示例代码:
public abstract class GraphWidget {
public abstract string Display();
public string Title {get; set;}
public GraphWidget(string title){
this.Title = title;
}
}
public class BarGraph : GraphWidget{
public override string Display(){
return stuff...
}
}
因此,例如,如果我混合使用条形图和饼图,它们的Display()函数将会有所不同。我想在我的剃刀视图中确保接受IEnumerable,我可以正确显示每个项目。
答案 0 :(得分:2)
您可以使用" is"运算符来测试GraphWidgets是否属于某个派生类:
var graphs = new List<GraphWidget>{new BarGraph("Bar"), new PieGraph("Pie")};
foreach(var graph in graphs)
{
if (graph is BarGraph)
{ // it's a BarGraph
}
else if (graph is PieGraph)
{ // it's a PieGraph
}
}
如果您需要将它们用作派生类,那么您可以使用&#34; as&#34;运营商:
/* Note: if graph is actually of type PieGraph,
then barGraph would be null */
var barGraph = graph as BarGraph;
答案 1 :(得分:2)
据我了解,您可以使用LINQ方法OfType:
var list = new List<GraphWidget>();
var badList = list.OfType<BarGraph>().ToList();