提问人:Bogey 提问时间:10/27/2023 更新时间:10/28/2023 访问量:53
源生成器可以生成以匿名类型为参数的方法吗?
Can a source generator generate methods with anonymous types as parameters?
问:
源生成器是否可以扫描程序集以查找使用的匿名类型,并专门为这些类型生成扩展方法?
例如,假设您有以下代码
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
答:
1赞
Jason Malinowski
10/28/2023
#1
不,这是不可能的,因为生成器仍然必须生成“常规”源代码,并且无法命名匿名类型。
评论