如何使用Roslyn创建泛型类型引用?

时间:2015-02-23 09:47:22

标签: roslyn

我想创建对&#34; System.IEquatable<MyType>&#34;的引用,其中开放泛型类型可以通过typeof到达,泛型参数只能作为文本。如何创建可用作字段类型等的正确NameSyntax

我们最近使用SF.ParseName创建了QualifiedNameSyntax(不是GenericNameSyntax让我感到奇怪的事情)。但是,我认为这并不理想,因为我自己处理<>和string.Join。

2 个答案:

答案 0 :(得分:2)

如果您在工作区层中执行此操作,还可以使用SyntaxGenerator类型以与语言无关的方式执行此操作:

var generator = SyntaxGenerator.GetGenerator(document);
generator.QualifiedName(generator.IdentifierName("System"),
                        generator.GenericName(generator.IdentifierName("IEquatable"), 
                                              new [] { generator.IdentifierName("MyType") }));

这将生成System.IEquatable&lt;的MyType&GT;用于VB文档的C#和System.IEquatable(Of MyType)。

答案 1 :(得分:1)

您可以使用以下模式:

SF.GenericName(
    SF.Identifier(@"IEquatable"))
.WithTypeArgumentList(
    SF.TypeArgumentList(/.../))