如何配置.NET空值分析将禁用空值的引用视为可能为空?
如何将无空值信息的外部引用视为maybe-null?
问题背景
Nullable References文档中说明表达式有两种状态:
- not-null:表达式确定不为空
- maybe-null:表达式可能为空
但实际行为与该描述不符:当引用一个禁用空值分析的类库时,启用空值检查的项目会将该类库的表达式判定为“确定不为空”。
重现代码与配置
类库项目配置
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>disable</Nullable> </PropertyGroup> </Project>
类库测试类
public static class Class1 { public static string Foo { get; set; } }
启用空值检查的项目配置
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" /> </ItemGroup> </Project>
测试代码
static void Main(string[] args) { string bar = Class1.Foo; // 无警告,被判定为not-null string bar2 = null; // 有警告,符合预期 }
上述代码中,第一条赋值语句无警告,第二条有警告,说明空值分析将无空值信息的外部成员视为“确定不为空”的类型,这会隐藏潜在的空引用风险。
需求
希望通过配置空值分析,将所有未知来源(无空值信息)的引用视为maybe-null,且无需修改类库项目(无法控制所有引用库的作者),是否有可行方案?
内容的提问来源于stack exchange,提问作者kwitee
相关产品推荐
相关产品推荐

