![]() |
1
3
我在很大程度上依赖于表达式树,将我想对当前应用程序执行的许多操作推送到编译时,即静态类型检查。 我遍历表达式树,将它们转换为其他“有意义”的内容。 有一件事我做了很多,那就是我不使用URL,而是使用类似MVC的方法来声明lambda函数,并将其转换为。。。解释,编译器将生成的表达式树转换为URL。当调用此URL时,我会执行相反的操作。这样,我就可以对断开的链接进行编译时检查,这对于重构和重载也非常有效。我认为以这种方式使用表达式树是很酷的。 你可能想检查一下访问者模式,这是一个痛苦的开始,因为它在开始时没有多大意义,但它将所有东西联系在一起,这是解决编译器构造中类型检查的一种非常正式的方法。您也可以执行同样的操作,但不必进行类型检查,而是根据您的需要发出所需的内容。 我目前正在极力反对的是构建一个简单的框架来翻译(或者实际上我应该说是解释)表达式树并发出JavaScript的能力。其思想是,编译器生成的表达式树将转换为与某些对象模型接口的有效JavaScript。 令人兴奋的是,当我出错时,编译器总是能够告诉我最终结果只是一堆字符串,但重要的是这些字符串是如何创建的。他们进行了一些验证,这意味着什么。
所以我喜欢这类东西,这就是元编程的全部内容,在你的程序中编写程序来执行程序。我说继续! |
![]() |
2
2
从Expression.Body中收集PropertyInfo对象与 my solution |
![]() |
3
2
我很感激你对这里的财产所做的一切。我遇到了这个难题。写作总是让人觉得很奇怪:
如果属性更改了名称,或者调用中的文本输入错误,那么就会出现问题。我学到的是,这可能需要通过测试来处理。特别是单元测试。我会编写单元测试来强制“DoSomething”调用正确工作。 您可以尝试的另一件事是使用属性装饰属性,然后在构建类时针对类进行反射,以查找具有该属性的属性和加载规则。
|