5

几年前,Eric Lippert写了一篇关于假设的 infoof 运算符的博客,它允许您在编译时而不是在运行时获取方法/属性信息基本上说这是一匹漂亮的小马,但没有独角兽......

我读了一些关于 Rosyln 在编译时重写代码的能力,使用 Roslyn 实现 infoof 有多难?

编辑:我认为这可能是获取 Eric 所说的所有内容的一种方式,但如果不是,我应该稍微分解一下这些功能。

  1. 获取属性名称。
  2. 获取属性类型。
  3. 获取属性访问器。
  4. 获取方法名称。
  5. 得到他所说的infoof的一切......

以重构安全的方式,在编译时得到验证。就我个人而言,1 涵盖了我实际使用的大约 90%(用于获取呼叫者姓名的新呼叫者信息属性实际上可以涵盖大约 60%,但当然,如果有一种方法可以在该方法的内部和外部工作,这将是可取的)。

4

1 回答 1

5

您可以轻松地使用 Roslyn 将一个有效的 C# 代码重写为另一个有效的 C# 代码。但这并不意味着为语言添加扩展。

Roslyn解析无效代码(如果你想在不完整的行上将它用于 IntelliSense,它必须解析),但由于它是无效的,因此不能保证它会正确执行(因为不清楚究竟是什么“正确”意思是)。另外,我认为它将使用的结构infoof对您来说不是很方便。

总结一下:这不是 Roslyn 的用途,这样做可能是个坏主意。但我认为使用 Roslyn 做到这一点并非不可能。

于 2012-06-29T05:32:43.133 回答