属性又名 infoof——通过 Rosyln?

jmo*_*eno 5 .net roslyn

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

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

编辑:我认为这可能是一种获得 Eric 所说的他们正在考虑的所有内容的方法,但我应该对功能进行一些分解,以防万一。

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

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

svi*_*ick 5

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

罗斯林解析无效代码太(它有,如果你想使用它的智能感知上的不完整的线),但因为它是无效的,也不能保证它会做是正确的(因为它目前还不清楚究竟是什么“正确”意思)。另外,我认为它将用于的结构infoof对您来说不是很方便。

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

  • 这不是它的意思,但我们很乐意看到你尝试它。:-) 如果你明智地选择了你的语法,你仍然可以得到一些可以解析为有效 C# 的东西。例如, infoof(Foo) 将解析(尽管 _not_ 语义绑定)作为调用表达式。 (2认同)