我想創建一個「System.IEquatable<MyType>
」的引用,其中可以通過typeof
和泛型參數作爲純文本來訪問開放泛型類型。如何創建可用作字段類型等的正確NameSyntax
?如何使用Roslyn創建泛型類型引用?
我們最近使用了SF.ParseName
,它創建了QualifiedNameSyntax
(不是GenericNameSyntax
有什麼奇怪的)。不過,我認爲這並不理想,因爲我正在處理<
,>
和string.Join在我自己的。
我想創建一個「System.IEquatable<MyType>
」的引用,其中可以通過typeof
和泛型參數作爲純文本來訪問開放泛型類型。如何創建可用作字段類型等的正確NameSyntax
?如何使用Roslyn創建泛型類型引用?
我們最近使用了SF.ParseName
,它創建了QualifiedNameSyntax
(不是GenericNameSyntax
有什麼奇怪的)。不過,我認爲這並不理想,因爲我正在處理<
,>
和string.Join在我自己的。
您可以使用以下模式:如果您在工作區層這樣
SF.GenericName(
SF.Identifier(@"IEquatable"))
.WithTypeArgumentList(
SF.TypeArgumentList(/.../))
,您還可以使用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)。
'QualifiedNameSyntax'的最後一個組件應該是'GenericNameSyntax'。 – 2015-02-23 13:25:36
您可以使用http://roslynquoter.azurewebsites.net/查看如何使用apis生成一段語法。只需粘貼「System.IEquatable」 –
2015-02-23 18:05:14
感謝您的鏈接。這是一個完美的助手,如果你不想安裝VS2015和可視化器:) – Matthias 2015-02-24 12:51:23