问题描述
我有一个.Net Core 3.1 ASP.NET应用程序,其中启用了nullable:
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<Nullable>enable</Nullable>
它还使用Microsoft.CodeAnalysis.FxCopAnalyzers
(3.3.0)和StyleCop.Analyzers
。
我有一个带有以下签名的方法:
public async Task<SomeResponse> DoSomethingAsync(IIdentity identity)
在这种方法中,我有以下内容:
string? adfsUpn = identity.Name;
但是,这给了我警告:
错误CA1062在外部可见方法[...]中,验证参数 使用之前,“身份”为非空。如果合适,扔一个 ArgumentNullException当参数为null或添加代码合同时 先决条件断言非null参数。
基本上,这表明除非我首先对其进行了null测试,否则我不应该访问.Name
对象上的identity
属性。
但是......
当我(从控制器)调用此方法时,我传入了this.User.Identity
,并且智能感知告诉我this.User
和this.User.Identity
都不为空。
回到我的方法...我在顶部添加以下保护子句:
if (identity == null)
{
.....
}
但是现在我被告知,身份永远不能为空,identity == null
将永远为假。这就是我希望使用“ Nullable”的原因,但是似乎Visual Studio或FxCop或StyleCop不能正确解释这种情况。
我可能只是添加一个编译指示来忽略此内容,但是在我这样做之前,只想检查一下我是否没有丢失任何东西...。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)