Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Roslyn代码生成,如何为给定类型创建类型表达式_C#_Roslyn - Fatal编程技术网

C# Roslyn代码生成,如何为给定类型创建类型表达式

C# Roslyn代码生成,如何为给定类型创建类型表达式,c#,roslyn,C#,Roslyn,我正在尝试使用Roslyn生成代码。我创建了如下方法: var workspace = new AdhocWorkspace(); var generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp); var parameters = new SyntaxNode[] { generator.ParameterDeclaration("MyParam", generator.TypeExpression(S

我正在尝试使用Roslyn生成代码。我创建了如下方法:

var workspace = new AdhocWorkspace();
var generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp);

var parameters = new SyntaxNode[] { generator.ParameterDeclaration("MyParam", generator.TypeExpression(SpecialType.System_Boolean))};

var body = ...

var method = generatpr.MethodDeclaration(
   "MyMethod", 
   parameters,
   null, 
   null,
   Accessibility.Public,
   DeclarationModifiers.Virtual,
   new SyntaxNode[] { body});

我的问题是,如何创建其他类型的参数,如Guid或其他结构或类?我可以用一种与语言无关的方式来做吗?

yntaxGenerator实例,我有一个类型对象的实例,所以我使用了SyntaxGenerator.IdentifierName()函数,并传入了类型实例的FullName属性

var workspace = new AdhocWorkspace();
var generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp);

var parameters = new SyntaxNode[] { generator.ParameterDeclaration("MyParam", generator.IdentifierName(typeParameter.FullName))};

var body = ...

var method = generatpr.MethodDeclaration(
   "MyMethod", 
   parameters,
   null, 
   null,
   Accessibility.Public,
   DeclarationModifiers.Virtual,
   new SyntaxNode[] { body});

这回答了你的问题吗?最有可能帮助我的是Compilation.GetTypeByMetadataName,但我需要一个编译对象的实例。我怎么得到它?默认值literal@EvanTrimboli-我也看到了,但它需要编译。因为我正在生成代码,所以我有一个SyntaxGenerator实例,还有一个Type对象的实例,所以我使用了SyntaxGenerator.IdentifierName()函数,并传入了Type实例的FullName属性。