我有一个抽象类,Tile。
我有另一个类,WebTile,继承了Tile类。
WebTile有一个private string html
,而Tile没有。
public abstract class Tile
{
private string name;
private string description;
public string Name
{
get { return name; }
}
public string Description
{
get { return description; }
}
protected Tile(string name, string description)
{
this.name = name;
this.description = description;
}
}
public class WebTile : Tile
{
private string html;
public string HTML
{
get { return html; }
}
public WebTile(string name, string description, string html) : base(name, description)
{
this.html = HTML;
}
}
我有一个返回Tiles (List<Tile>)
我循环遍历列表,并将类型为WebTile的Tiles转换为WebTile。
然后我想得到html-string。但演员阵容后它变得空洞了?!我错过了什么?
foreach (Tile tile in xmlparser.GetTiles())
{
switch (tile.GetType().ToString())
{
case "Dashboard.Tiles.WebTile":
WebTile _tile = tile as WebTile;
sb.Append("<div class=\"panel panel-default\">");
sb.Append("<div class=\"panel-heading\">" + _tile.Name + "</div>");
sb.Append("<div class=\"panel-body\">");
sb.Append(_tile.HTML); // <--- THIS IS EMPTY!!
sb.Append("</div>").Append("</div>");
break;
default:
break;
}
}
答案 0 :(得分:2)
您可以使用Linq的OfType
方法,而不是关闭完全限定的类型名称:
foreach (WebTile tile in xmlparser.GetTiles().OfType<WebTile>())
{
sb.Append("<div class=\"panel panel-default\">");
sb.Append("<div class=\"panel-heading\">" + tile.Name + "</div>");
sb.Append("<div class=\"panel-body\">");
sb.Append(tile.HTML);
sb.Append("</div>").Append("</div>");
}
但你的构造函数是错误的 - 你正在从属性中分配私有字段,而不是传入的参数:
public WebTile(string name, string description, string html) : base(name, description)
{
this.html = html; // not HTML
}
答案 1 :(得分:1)
public class WebTile : Tile
{
private string html;
public string HTML
{
get { return html; }
}
public WebTile(string name, string description, string html) : base(name, description)
{
//wronge
// this.html = HTML;
//correct
this.html = html;
}
}