C# 如何检查.net 5源生成器中是否启用了可为null的引用类型

C# 如何检查.net 5源生成器中是否启用了可为null的引用类型,c#,.net,roslyn,.net-5,C#,.net,Roslyn,.net 5,我正在制作一个基于json的库 如果我知道json字符串属性不能为null,我可以通过跳过解析json字符串属性时的null检查来优化字符串处理 在启用可空引用类型的情况下,我可以假定字符串(不带?)不是空的。但是,如果“可空引用类型”处于禁用状态,则无法执行 如何从.Net 5源代码生成器确定可空引用类型是否打开。由于#Nullable指令,它可能在不同的位置打开或关闭。您应该做的是查看正在查看的任何符号的ITypeSymbol,因为它将有一个NullableAnnotation属性,该属性为

我正在制作一个基于json的库

如果我知道json字符串属性不能为null,我可以通过跳过解析json字符串属性时的null检查来优化字符串处理

在启用可空引用类型的情况下,我可以假定字符串(不带?)不是空的。但是,如果“可空引用类型”处于禁用状态,则无法执行

如何从.Net 5源代码生成器确定可空引用类型是否打开。

由于
#Nullable
指令,它可能在不同的位置打开或关闭。您应该做的是查看正在查看的任何符号的ITypeSymbol,因为它将有一个
NullableAnnotation
属性,该属性为在这种情况下,“无”表示“该功能未针对该类型启用”,而“已注释/未注释”表示该功能已启用,这是适当的状态。因此,在您的情况下,如果ITypeSymble.NullableAnnotation为“NotAnnotated”,则表示它是不可为null的类型。

由于
#nullable
指令,它可能在不同的位置打开或关闭。您应该做的是查看正在查看的任何符号的ITypeSymbol,因为它将有一个
NullableAnnotation
属性,该属性为在这种情况下,“无”表示“该功能未针对该类型启用”,而“已注释/未注释”表示该功能已启用,这是适当的状态。因此,在您的例子中,如果ITypeSymble.NullableAnnotation为“NotAnnotated”,则表示它是不可为null的类型