Это приложение на 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
Это пренадлежит.
Например:
// 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 # подходит для такого рода приложений. Я изучил эталонные значения и отражение, и ни то, ни другое не кажется подходящим.
Я ценю любое понимание и совет или даже способы переосмысления этого подхода.