Это приложение C # winforms.
Введение
Я создаю форму, которая позволит пользователям импортировать данные из существующей базы данных MySql или SQL Server в мою базу данных SQL Server. Это позволяет пользователям быстро импортировать IP-адреса и другие данные без необходимости повторного ввода их через элемент управления.
Пример:
Упрощенно, у меня есть два объекта, FieldObject
и SensorObject
. FieldObject
существует для хранения имен и типов полей базы данных источника и назначения. SensorObject
- это объект, который я позже заполнил из записей в базе данных. Для простоты я опускаю обработку типов и другие функции, которые не имеют отношения к вопросу. (Данные для DestinationField
ограничены списком, который я предоставляю пользователю, и поступают из массива или списка в программе.) Вот пример обоих:
public class FieldObject
{
public string DestinationField {get; set;}
public string SourceField {get; set;}
}
public class SensorObject
{
public string Name {get; set;}
public string IPAddress {get; set;}
}
Проблема:
Когда пользователь заполняет различные поля FieldObject
, я использую информацию для заполнения целевой базы данных, хотя у меня есть большой оператор switch, который проверяет имя поля назначения, чтобы узнать, какому свойству SensorObject
оно принадлежит. 1027 *
Например:
// Reader is a SqlDataReader with the prerequisite database connection
FieldObject myField = new FieldObject
{
DestinationField = "name",
SourceField = "proprietary"
};
SensorObject mySensor = new SensorObject();
switch (myField.DestinationField)
{
case "name":
mySensor.Name = Convert.ToString(Reader[myField.DestinationField]);
break;
case "ip_address":
mySensor.IPAddress = Convert.ToString(Reader[myField.DestinationField]);
break;
}
Как видите, для обработки большего количества свойств объекта потребуется больше избыточного кода.
Вопрос:
Мне бы хотелось как-то сохранить свойство SensorObject
, которому принадлежат данные, чтобы при итерации FieldObjects
в списке я мог эффективно исключить оператор switch.
Что-то вроде:
foreach(FieldObject f in myFieldList)
{
mySensor(f.mySensorField) = Convert.ToString(Reader[f.DestinationField]);
}
Я не уверен, какая техника в C # подходит для такого рода приложений. Я посмотрел на справочные значения и рефлексию, и ни один из них не кажется подходящим.
Я ценю любые идеи и советы или даже способы переосмыслить этот подход.