好的。所以我有一些代码,将winForm上的某些控件映射到对象中的某些属性,以便在数据发生某些事情时对控件执行某些操作。一切都很好,也可以正常运行。不是问题所在。问题是,要添加映射项,我调用了一个类似以下函数的函数:
this.AddMapping(this.myControl,myObject,"myObjectPropertyName");
我遇到的问题是,在编译时很难区分上述行和下面这行之间的差异:
this.AddMapping(this.myControl,myObject,"myObjectPropretyName");
由于最后一个参数是一个字符串,因此没有编译时检查或任何强制执行该字符串实际上对给定对象上的有效属性名称的机制。此外,像重构和“查找所有引用”这样的操作会忽略此类引用,导致当属性名称本身更改时出现滑稽的情况。因此,我想知道是否有一种方法可以更改函数,使得我传递的仍然是某种方式表示属性名称的字符串,但具有编译时检查实际值的功能。有人说我可以使用表达式树来实现这一点,但我已经阅读了相关资料,似乎没有看到关联。我很想做这样的事情:
this.AddMapping(this.myControl,myObject,myObject.myObjectPropertyName);
或者甚至
this.AddMapping(this.myControl,myObject.myObjectPropertyName);
会很棒!
有什么想法吗?
nameof(Foo)
或memberof(Foo)
关键字/方法。我们一直在询问和希望,但迄今为止还没有。在那之前,表达式是我所知道的最接近的。 - Marc Gravell