2015-02-23 32 views
1

我想創建一個「System.IEquatable<MyType>」的引用,其中可以通過typeof和泛型參數作爲純文本來訪問開放泛型類型。如何創建可用作字段類型等的正確NameSyntax如何使用Roslyn創建泛型類型引用?

我們最近使用了SF.ParseName,它創建了QualifiedNameSyntax(不是GenericNameSyntax有什麼奇怪的)。不過,我認爲這並不理想,因爲我正在處理<,>和string.Join在我自己的。

+0

'QualifiedNameSyntax'的最後一個組件應該是'GenericNameSyntax'。 – 2015-02-23 13:25:36

+2

您可以使用http://roslynquoter.azurewebsites.net/查看如何使用apis生成一段語法。只需粘貼「System.IEquatable 」 – 2015-02-23 18:05:14

+0

感謝您的鏈接。這是一個完美的助手,如果你不想安裝VS2015和可視化器:) – Matthias 2015-02-24 12:51:23

回答

1

您可以使用以下模式:如果您在工作區層這樣

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

,您還可以使用SyntaxGenerator類型做到這一點的語言無關的方式:

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

這將爲VB文件生成System.IEquatable < MyType> for C#和System.IEquatable(Of MyType)。