0

我已将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参数并复制该表的信息,但我希望有一种更直接的方法来做到这一点。

4

2 回答 2

2

我会为 DataTable 编写一个扩展方法而不是对其进行子类化

public static class DataTableExtensions
{
    public static void SpecialMethod(this DataTable dt)
    {
        //do something
    }
}

--

DataTable dt = .........
dt.SpecialMethod();
于 2012-09-24T21:38:05.033 回答
0

我喜欢将运算符读:is a. 所以 aDataTableExtended是 a DataTable。请注意,这并不意味着aDataTable是 a DataTableExtended,因此无法强制转换。

我认为按照您的建议,在这个方向上“强制转换”的最佳方法是在构造函数中获取基类的实例。

另请参阅此答案

于 2012-09-24T21:37:04.417 回答