.net core 可为空的引用类型-对第三方代码的调用是否禁用流分析? 字符串?storageAccountName=Environment.GetEnvironmentVariable(“storageAccountName”); 一串storageKey=Environment.GetEnvironmentVariable(“storageKey”); var-storageAccount=new-CloudStorageAccount(new-StorageCredentials(storageAccountName,storageKey),useHttps:true); MyMethod(storageAccountName、storageKey); 私有静态void MyMethod(字符串storageAccountName、字符串storageKey) { }

.net core 可为空的引用类型-对第三方代码的调用是否禁用流分析? 字符串?storageAccountName=Environment.GetEnvironmentVariable(“storageAccountName”); 一串storageKey=Environment.GetEnvironmentVariable(“storageKey”); var-storageAccount=new-CloudStorageAccount(new-StorageCredentials(storageAccountName,storageKey),useHttps:true); MyMethod(storageAccountName、storageKey); 私有静态void MyMethod(字符串storageAccountName、字符串storageKey) { },.net-core,nullable-reference-types,.net Core,Nullable Reference Types,对于此代码,VS2019显示调用MyMethod的警告。当它也接受字符串参数时,为什么不为调用存储凭据显示它呢?我的假设是,您使用的存储凭据类型没有为可空性进行注释,这意味着类型检查器不知道可空值是否可接受。对于此类情况(类型为“不经意”)代码的分析与NRT前的情况基本相同 这与MyMethod方法形成对比,后者存在于可空上下文中,因此不接受空引用。因此,编译器会发出警告 随着时间的推移,没有注释的外部库应该会越来越少。如果我是包含StorageCredentials的库的作者,我将如何注释我的

对于此代码,VS2019显示调用
MyMethod
的警告。当它也接受
字符串
参数时,为什么不为调用
存储凭据
显示它呢?

我的假设是,您使用的
存储凭据
类型没有为可空性进行注释,这意味着类型检查器不知道可空值是否可接受。对于此类情况(类型为“不经意”)代码的分析与NRT前的情况基本相同

这与
MyMethod
方法形成对比,后者存在于可空上下文中,因此不接受空引用。因此,编译器会发出警告


随着时间的推移,没有注释的外部库应该会越来越少。

如果我是包含
StorageCredentials
的库的作者,我将如何注释我的库以生成警告?您应该使用8或更高版本的语言在“可空连接”中编译代码。您可以向特定文件/行添加
#nullable enable
,或在项目文件中设置
enable
属性。这个功能上的文档非常好。