我已将DataTable
课扩展如下:
class DataTableExtended:DataTable
{
public void specialMethod()
{}
}
我想将XML节点解析为此子类,我尝试使用以下内容:
public DataTableExtended parseNodeToDataTable()
{
DataSet ds = new DataSet();
XmlNodeReader reader = new XmlNodeReader(this.resultNodes);
ds.ReadXml(reader);
DataTable dt = ds.Tables[1];
DataTableExtended dte=(DataTableExtended) dt;
return dt;
}
它正在抛出一个InvalidCastException
。从我到目前为止所读到的,这是因为不可能将父类强制转换为子类。那是准确的吗?如果是这样,我知道我可以重写DataTableExtended
构造函数,以便它接受DataTable
参数并复制该表的信息,但我希望有更直接的方法来做到这一点。
答案 0 :(得分:2)
我会为DataTable编写一个扩展方法,而不是将其子类化
public static class DataTableExtensions
{
public static void SpecialMethod(this DataTable dt)
{
//do something
}
}
-
DataTable dt = .........
dt.SpecialMethod();
答案 1 :(得分:0)
我想将:
运算符视为is a
。因此DataTableExtended
是DataTable
。请注意,不暗示DataTable
是DataTableExtended
,因此无法投出。
我认为在这个方向“强制转换”的最好方法是在你的建议中使用构造函数中的基类实例。
另见this answer。