我使用的平台大量使用反射和代码生成来初始化某些特殊类型的成员。它看起来像这样:
public class MyGraph : PXGraph<MyGraph>
{
public PXSelect<DBTable> view;
}
我想在代码中添加可空引用类型分析。但是,我找不到一个优雅的解决方案来避免出现多个关于非可空字段未初始化的警告。它们显示在字段或类型构造函数上。平台会初始化它们
我知道我可以抑制可空分析的警告。但是,我不喜欢它的外观。我不喜欢指令,因为它们会使代码变得混乱,我更不喜欢抑制属性。
我不喜欢以下声明,因为它对我来说看起来很无意义:
public class MyGraph : PXGraph<MyGraph>
{
public PXSelect<DBTable> view = null!; // or = default!
}
我也尝试了可空属性,但没有太多收获。
我尝试使用required
这样的关键字:
public class MyGraph : PXGraph<MyGraph>
{
public required PXSelect<DBTable> view;
}
我最喜欢这个声明,但是我收到有关未初始化字段的编译器错误。
有没有办法以更复杂的方式抑制编译器警告?我可以使用 Roslyn 以某种方式影响编译器诊断吗?
正如 @marc-gravell 提到的,Roslyn 中有一个
DiagnosticSuppressor
API。我曾用它做过类似的事情。即使您将带有抑制器的分析器作为 nuget 包添加到项目中,它也能正常工作。不过,Rider IDE 不支持此 Roslyn 功能,因此,使用它需要您自担风险。
至于代码,它看起来应该是这样的:
您提到了 Roslyn;如果您乐意编写自己的分析器来识别允许的场景,那么:您正在寻找的是
DiagnosticSuppressor
。请注意,只能抑制警告(而不是错误)。