如何检查.net 5源生成器中是否可以为空的引用类型

问题描述

我正在制作一个基于.Net 5 Source Generator的json库。

如果我知道json字符串属性不能为空,则可以通过跳过对json字符串属性的空检查来优化字符串处理。

启用可空引用类型后,我可以假设字符串(不带?)不为空。但是,如果关闭了“可空引用”类型,那么我将不能。

如何从.Net 5源生成器中确定是否启用了可空引用类型。

解决方法

由于#nullable伪指令,有可能在不同的地方打开或关闭它。您应该做的是查看ITypeSymbol,以查看所要查找的任何符号,因为它将具有一个this enum属性NullableAnnotation。在这种情况下,“ None”表示“该类型的功能尚未启用”,而Annotated / NotAnnotated表示该功能已启用,这是适当的状态。因此,在您的情况下,如果ITypeSymbol.NullableAnnotation为“ NotAnnotated”,则表示它是非空类型。