Я что-то делаю с Odbc DataReader. Каждая строка в результате запроса должна быть преобразована в ResultObject
, похожую на это:
struct ResultObject {
public int Prop1 { get; set; }
public string Prop2 { get; set; }
...
}
Чтобы написать больше кода для конкретного домена, я хочу преобразовать этот код
var query = "SELECT Prop1, Prop2, ... FROM MyTable;";
... connect, submit query
while( reader.Read() ) {
var fieldValue = fields[ fieldindex ];
switch( fieldindex ) {
case( indexProp1 ): result.Prop1.Set( (int) fieldValue); break;
case( indexProp2 ): result.Prop2.Set( (string) fieldvalue); break;
...
}
}
в нечто более общее, где я динамически строю отображение между индексами и «сеттерами»:
Но было бы неплохо иметь что-то еще более лаконичное, например:
PropMapper mappers[] = {
new PropMapper("Prop1", ResultType.Prop1 ),
new PropMapper("Prop2", ResultType.Prop2 ),
....
};
Однако я понятия не имею, как создать PropMapper
из свойства ResultType
.
Вопрос:
Как я могу сгенерировать объект, который переносит / делегирует свойство данного типа?
Примечание: хотя ORM довольно полезны для этого, я на самом деле спрашиваю только, как C # позволяет создавать делегат (или что-нибудь эквивалентное)