У меня есть проект .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;