我有带有同步框架的 .NET 项目和两个单独的 MS SQL 和 Compact SQL 数据集。在我的基类中,我有一个通用的 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 的类型来以更智能的方式仅使用一行代码。
我的问题是在设计时,为了访问诸如“CustomerID”之类的数据表属性,它必须转换为 MSSQLDataSet.CustomerDataTable 或 CompactMSSQLDataSet.CustomerDataTable。
有没有办法让函数或运算符将 _datatable 转换为其运行时类型,但仍然能够使用两种类型之间相同的设计时属性?就像是:
((aType)_dataTable)[i].CustomerID = value;
//or
GetRuntimeType(_dataTable)[i].CustomerID = value;