Как я могу сохранить ссылку на свойство объекта в другом объекте?

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

Я ценю любое понимание и совет или даже способы переосмысления этого подхода.

6
задан marc_s 17 August 2010 в 20:47
поделиться