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です。つまり、aDataTableExtendedDataTableです。これは、 aが aであることを意味しないため、キャストに失敗することに注意してください。DataTableDataTableExtended

この方向に「キャスト」する最良の方法は、コンストラクターで基本クラスのインスタンスを取得することだと思います。

この回答も参照してください。

于 2012-09-24T21:37:04.417 に答える