2017-04-11 3 views
2

kann ich ein SyntaxGenerator verwendet einen Parameter vom Typ Int32 wie so ...Wie erstellt man ein Roslyn ITypeSymbol für einen beliebigen Typ?

var generator = SyntaxGenerator.GetGenerator(document); 
var paramType = generator.TypeExpression(SpecialType.System_Int32); 
var param = generator.ParameterDeclaration("MyParam", paramType); 

Welche entsprechenden Code soll ich einen Parameter vom Typ Datensatz erstellen verwenden zu generieren?

Ich nehme ich brauche eine ITypeSymbol zu schaffen, um die generator.TypeExpression, passieren, aber wie dies zu tun?

+0

In welchem ​​Zusammenhang tun Sie dies tun wollen? Hast du Zugriff auf ein semantisches Modell oder eine Zusammenstellung? Wenn dies der Fall ist, können Sie 'SyntaxFactory.ParseTypeName()' verwenden, um 'TypeSyntax' von einem beliebigen Typnamen zu erhalten. Und dann können Sie das Typensymbol durch das semantische Modell gehen lassen. – Tamas

+0

Verstehen, dass ich Roslyn ziemlich neu bin ... Ich habe versucht, dies im Kontext von DiagnosticAnalyzers, CodeFixProviders und RefactoringProviders zu tun, aber als Roslyn neu zu sein, bin ich nicht sicher, was ich zu meiner Verfügung habe dieses Szenario. Ich hatte gehofft dies auf eine sprachunabhängige Art und Weise zu erreichen, daher die Verwendung eines SyntaxGenerators anstelle einer SyntaxFactory, obwohl, wenn ein Weg gefunden werden kann, einen Verweis auf die korrekte SyntaxFactory zur Laufzeit zu bekommen, dann könnte das funktionieren. –

Antwort

1

Wenn Sie Zugang zu einem Compilation haben, können Sie GetTypeByMetadataName verwenden, wie in this blog post erklärt und this SO answer:

var dataSetType = compilation.GetTypeByMetadataName("System.Data.DataSet"); 
var paramType = generator.TypeExpression(dataSetType); 
var param = generator.ParameterDeclaration("MyParam", paramType); 
+0

Also, da ich entweder in einem DiagnosticAnalyzer, CodeFixProvider oder einem RefactoringProvider bin, woher bekomme ich eine Compilation? –

+0

In einem Analysator sollten Sie es aus einem Analysekontext abrufen können. Ich würde vermuten, dass es für die anderen Situationen ähnlich ist. – svick

+0

Sieht nicht wie die anderen 2 aus. Allerdings haben sie eine Document.Project.GetCompilationAsync-Methode, die so gut zu sein scheint. :) –

Verwandte Themen