【问题标题】:How to get all applicable methods, including extension methods, for a NamedTypeSymbol in Roslyn?如何获取 Roslyn 中 NamedTypeSymbol 的所有适用方法,包括扩展方法?
【发布时间】:2016-06-03 14:12:15
【问题描述】:

我正在尝试使用附加语法扩展 Roslyn 编译器,与 LINQ 不同,它必须事先知道 SelectZip 等是否可以应用于该类型。我在活页夹中执行此操作,因为我将嵌套语法节点简化为单个绑定表达式。 NamedTypeSymbol 上的 GetMembers 仅返回该类型的实际成员。如何获取为该类型定义且可在代码中的此位置访问的扩展方法列表?

【问题讨论】:

  • 你看过这个代码示例吗? joshvarty.wordpress.com/roslynfaq/csharp/#faq5
  • @WouterdeKort 谢谢,但这有点不同。这个 sn-p 首先编译源代码,而我正在扩展 Roslyn 编译器本身。谢谢,反正我看看SemanticModel是哪一步产生的。
  • 请注意,如果您使用语法生成类型推断表达式,并将这些名称作为匿名类型的委托成员或常规成员,这样的扩展可能会导致绑定阶段的循环依赖,并在表达式中使用该推断类型。

标签: c# extension-methods roslyn


【解决方案1】:

我不确定这是否适用于Binder 级别,但如果您可以获得Compilation 对象,那么您可以查询其GlobalNamespace 属性,即“根包含在源代码或引用元数据中定义的所有命名空间和类型的命名空间,并合并到一个命名空间层次结构中。”从中您可以获得(顶级)类型声明,然后您可以简单地查找与您正在处理的类型匹配的任何扩展方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 2014-08-03
    • 1970-01-01
    • 2016-02-13
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多