源生成器可以生成以匿名类型作为参数的方法吗?

问题描述 投票:0回答:1

源生成器是否可以扫描程序集以查找使用的匿名类型,并专门为这些类型生成扩展方法?

例如,假设您有以下代码

   var anon = new { Test = 123;}
   anon.SomeExtensionMethod(); // SomeExtensionMethod does not (yet) exist

可以使用源生成器来生成

SomeExtensionMethod
吗?

我已经快速尝试过。当源生成器运行时,匿名类型的名称和类型信息可用。但是,它们的名称包含在非编译器生成的代码中无效的字符,所以我的尝试导致了类似的结果

public static class SourceGeneratedCode
{
  public static void SomeExtensionMethod(this global::<anonymous type: int Test> value) { }
}

这当然不会编译。所以我想知道 - 有什么办法可以做到这一点吗?

我想为不同的匿名类型生成此方法的不同实现;意思是,

SomeExtensionMethod
不能只接受
object
,或者是通用的等等。

c# roslyn sourcegenerators
1个回答
0
投票

不,这是不可能的,因为生成器仍然必须生成“常规”源代码,并且无法命名匿名类型。

© www.soinside.com 2019 - 2024. All rights reserved.