如何解决查找Roslyn默认可为空的上下文
我们可以使用Roslyn(Microsoft CodeAnalysis)来获取nullability context。但是NullableContext
结构通常指示可空上下文是从项目默认值继承的。因此,在分析器中,我需要确定项目默认的可为空的上下文。我还没有从编译对象或语义模型中找到实现此目的的方法。
有什么办法吗?
解决方法
如果您希望项目为默认项目,则可以从Compilation.Options.NullableContextOption获取。
但是正如您在回答中正确观察到的那样,询问语义模型会为您计算有效值。
,我可能过早地发布了此内容,因为发布后不久我找到了解决方案。答案是,当NullableContext设置为Inherited时,这是一个标志值,其中未设置启用警告的标志,因此未启用支持非空引用类型的上下文(即,我们具有旧样式代码)。因此,至少我不需要弄清楚项目的默认值是什么。
更一般地,可以如下测试标记:
public static class NullableContextExtensions
{
private static bool IsFlagSet(NullableContext context,NullableContext flag) =>
(context & flag) == flag;
public static bool WarningsEnabled(this NullableContext context) =>
IsFlagSet(context,NullableContext.WarningsEnabled);
public static bool AnnotationsEnabled(this NullableContext context) =>
IsFlagSet(context,NullableContext.AnnotationsEnabled);
}
另一方面,您可能仍然想知道项目的默认值,因此,如果有人发布实现该目的的代码,我会将其标记为正确的答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。