You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ToDictionary()返回可空字典,如何转为非空Dictionary<string,string>?

解决IdentityResult.Errors创建字典时类型为可空的问题

问题出在启用了**Nullable Reference Types(可空引用类型)**的项目中,ASP.NET Core Identity的IdentityResult.Errors属性被定义为IEnumerable<IdentityError>?(即可空类型)。编译器的静态分析会认为result.Errors可能为null,因此推断ToDictionary的返回类型为Dictionary<string, string>?,但实际上如果result.Errors为null,调用ToDictionary会直接抛出ArgumentNullException,不会返回null。

以下是几种解决办法:

  • 如果你确定result.Errors绝对不会为null,可以用**null-forgiving运算符(!)**告诉编译器忽略可空警告:
var dictionary = result.Errors!.ToDictionary(e => e.Code, e => e.Description);
  • 提前做空检查,处理Errors为null的情况:
Dictionary<string, string> dictionary;
if (result.Errors == null)
{
    dictionary = new Dictionary<string, string>(); // 或者根据业务需求处理
}
else
{
    dictionary = result.Errors.ToDictionary(e => e.Code, e => e.Description);
}
  • 用空合并运算符??给Errors设置默认的空集合,确保不会传递null给ToDictionary:
var dictionary = (result.Errors ?? Enumerable.Empty<IdentityError>()).ToDictionary(e => e.Code, e => e.Description);

这样处理后,dictionary的类型就会被推断为非可空的Dictionary<string, string>。

内容的提问来源于stack exchange,提问作者KTOV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:45:30