Хорошо. Итак, у меня есть некоторый код, который отображает определенные элементы управления в winForm на определенные свойства объекта, чтобы выполнять определенные действия с элементами управления, когда определенные вещи происходят с данными. Все хорошо, хорошо работает. Не проблема. Проблема в том, что для добавления элементов в отображение я вызываю функцию, которая выглядит следующим образом:
this.AddMapping(this.myControl,myObject,"myObjectPropertyName");
Проблема, с которой я сталкиваюсь, заключается в том, что во время компиляции очень трудно определить разницу между приведенной выше строкой и приведенной ниже:
this.AddMapping(this.myControl,myObject,"myObjectPropretyName");
Поскольку последний параметр является строкой, нет никакой проверки времени компиляции или чего-либо подобного, что могло бы обеспечить, что сама строка действительно соответствует действительному имени свойства для данного объекта. Кроме того, такие вещи, как Refactor и «Найти все ссылки», упускают такой тип ссылок, что приводит к веселью при изменении имени самого свойства. Так что мне интересно, есть ли какой-нибудь способ изменить функцию так, чтобы то, что я передаю, все еще представляло собой строку, представляющую имя свойства, но с проверкой фактического значения во время компиляции. Кто-то сказал, что я мог бы сделать это с деревьями выражений, но я прочитал их и, похоже, не вижу связи. Я хотел бы сделать что-то вроде:
this.AddMapping(this.myControl,myObject,myObject.myObjectPropertyName);
или даже
this.AddMapping(this.myControl,myObject.myObjectPropertyName);
было бы сладко!
Есть идеи?