我的脑部有轻微的功能障碍。
假设我有一个可以包含图表或数据表的报表页面。但该页面有几个共同的组件,如标题,页码,通用报告信息等。
现在我已经使用公共数据字段创建了一个PageBase类,并且我有一个继承自基类的PageGraph类和PageTable类。 (我还创建了一个IPage接口,但VS / R#告诉我它是多余的,因为所有字段都包含在基类中)
我的代码看起来像这样:
var data = new List<IPage>();
pageItems.Where().OrderBy().ForEach(pageData => {
var page = pageData.PageType == 0 ? new PageGraph() : new PageTable(); // <- this one errs out.
page.header = pageData.header;
page.pageNumber = someCounter;
page.otherMetaData = pageData.otherMetaData;
if (pageData.PageType == PageTypes.Graph) {
// Fill graph fields etc.
...
如何基于pageData.PageType变量实例化正确的类?
语言是C#。
答案 0 :(得分:2)
如果
var page = pageData.PageType == 0 ? new PageGraph() : new PageTable();
错误地说错了,因为他们的编译器无法确定需要哪个类页面。如果PageGraph和PageTable都来自PageBase,那么也许这应该可行。
PageBase page = pageData.PageType == 0 ? (PageBase)(new PageGraph()) : (PageBase)(new PageTable());
一旦你有了基类,你就可以把它强烈地投射到你想要的地方
if (pageData.PageType == PageTypes.Graph) {
// Fill graph fields etc.
是您需要特定类属性的地方
if (pageData.PageType == PageTypes.Graph) {
// Fill graph fields etc.
var stonglyCastPage = (PageGraph)page;
...
例如
答案 1 :(得分:0)
Warrenn enslin的答案不起作用。使用以下内容:
PageBase page = pageData.PageType == 0 ? (PageBase)new PageGraph() : new PageTable();