Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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中从一个类型创建一个类型,但在转换一个可为null的_C#_Code Generation_Roslyn - Fatal编程技术网

C# 试图在Roslyn中从一个类型创建一个类型,但在转换一个可为null的

C# 试图在Roslyn中从一个类型创建一个类型,但在转换一个可为null的,c#,code-generation,roslyn,C#,Code Generation,Roslyn,我正在尝试编写一个函数,该函数接受现有类型,并将该类型转换为PropertyDeclaration。我几乎让它工作了,但是如果我传入的类型是可为null的,那么当我最终尝试用它编译类时,我会遇到以下错误: System.BadImageFormatException:不是有效的Win32应用程序。(HRESULT的例外:0x800700C1)。 这是我的密码: var classDeclaration = SyntaxFactory.ClassDeclaration("class name");

我正在尝试编写一个函数,该函数接受现有类型,并将该类型转换为PropertyDeclaration。我几乎让它工作了,但是如果我传入的类型是可为null的,那么当我最终尝试用它编译类时,我会遇到以下错误: System.BadImageFormatException:不是有效的Win32应用程序。(HRESULT的例外:0x800700C1)。

这是我的密码:

var classDeclaration = SyntaxFactory.ClassDeclaration("class name");
classDeclaration.AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword));
classDeclaration.AddMembers(ConvertToProperty(myType, myTypeName));

private static PropertyDeclarationSyntax ConvertToProperty(Type propertyType, string propertyName)
{
    var typeSyntax = SyntaxFactory.ParseTypeName(propertyType.ToString());
    var propertyDeclaration = SyntaxFactory.PropertyDeclaration(typeSyntax, propertyName)
        .AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
        .AddAccessorListAccessors(
            SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)),
            SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)));

    return propertyDeclaration;
}

如果我传入的类型不可为null,则该类可以正常编译。我对Roslyn不太熟悉,也没有在网上找到任何人做我想做的事情的例子。有人更熟悉并且有想法吗?

首先,你真的需要为你的问题添加更多细节。看这里:

对于您的问题,当您在非
nullable
类型上运行代码时,假设
int
,您将得到以下输出:

public class MyClass
{
    public System.Int32 MyProperty { get; set; }
}
但是使用
nullable
,您将得到以下结果:

public class MyClass
{
    public System.Nullable`1[System.Int32] MyProperty { get; set; }
}
您可以看到它不是有效的C代码

要解决此问题,请选中此项,只需复制粘贴,结果如下所示:

public class MyClass
{
    public Nullable<Int32> MyProperty { get; set; }
}

首先,你真的需要为你的问题添加更多的细节。看这里:

对于您的问题,当您在非
nullable
类型上运行代码时,假设
int
,您将得到以下输出:

public class MyClass
{
    public System.Int32 MyProperty { get; set; }
}
但是使用
nullable
,您将得到以下结果:

public class MyClass
{
    public System.Nullable`1[System.Int32] MyProperty { get; set; }
}
您可以看到它不是有效的C代码

要解决此问题,请选中此项,只需复制粘贴,结果如下所示:

public class MyClass
{
    public Nullable<Int32> MyProperty { get; set; }
}

生成的源代码是什么?你是什么意思?你能发布一个,这样我们就可以重现你的问题吗?你正在编译的源代码(由语法树生成)是什么?@SLaks我如何从树中获取源代码?生成的源代码是什么?你是什么意思?你能发布一个,这样我们才能重现您的问题?您正在编译的源代码(由语法树生成)是什么?@SLaks如何从语法树中获取源代码?