同期フレームワークを使用した .NET プロジェクトと、MS SQL および Compact SQL 用の 2 つの個別のデータセットがあります。私の基本クラスには、汎用の DataTable オブジェクトがあります。派生クラスでは、アプリケーションがオンラインで動作しているかオフラインで動作しているかに基づいて、Typed DataTable をジェネリック オブジェクトに割り当てます。例:
if (online)
_dataTable = new MSSQLDataSet.Customer;
else
_dataTable = new CompactSQLDataSet.Customer;
今、私のコードのどこでも、次のように現在のネットワークモードに基づいてチェックしてキャストを行う必要があります:
public void changeCustomerID(int ID)
{
if (online)
(MSSQLDataSet.CustomerDataTable)_dataTable)[i].CustomerID = value;
else
(CompactMSSQLDataSet.CustomerDataTable)_dataTable)[i].CustomerID = value;
}
しかし、これはあまり効率的ではないと思います。実行時に _dataTable の Type を動的に取得することで、1 行のコードのみを使用するよりスマートな方法で実行できると思います。
私の問題は設計時です。「CustomerID」などのデータテーブルのプロパティにアクセスするには、MSSQLDataSet.CustomerDataTable または CompactMSSQLDataSet.CustomerDataTable にキャストする必要があります。
関数または演算子を使用して _datatable を実行時の型に変換する方法はありますが、2 つの型間で同じ設計時のプロパティを使用することはできますか? 何かのようなもの:
((aType)_dataTable)[i].CustomerID = value;
//or
GetRuntimeType(_dataTable)[i].CustomerID = value;