可能的空引用参数...在网络 6 中使用<Nullable>启用</Nullable>时

  • 本文关键字:Nullable 启用 引用 参数 网络 c#
  • 更新时间 :
  • 英文 :


在项目定义中使用带有<Nullable>enable</Nullable>的Net6我有

public class Options {
public Dictionary<String, String> Accounts { get; set; } = new Dictionary<String, String>();
}
Options options = new Options();
List<KeyValuePair<String, String>> parameters = new List<KeyValuePair<String, String>>();
parameters.Add(new KeyValuePair<String, String>("doc", options?.Accounts["doc"]));

我得到错误`中参数'value'的可能空引用参数

options?.Accounts["doc"];

我可以使用以下内容:

if (options.Accounts.ContainsKey("doc"))
parameters..Add(new KeyValuePair<String, String>("to", options?.Accounts["doc"]!));

我添加了if语句和!。。。

有没有其他方法可以在不使用if语句的情况下解决此问题?

假设您希望该值可能为null-如果options为null,它肯定会为null1-您应该将相应的类型参数更改为null:

List<KeyValuePair<String, String?>> parameters =
new List<KeyValuePair<String, String?>>();
parameters.Add(new KeyValuePair<String, String?>("doc", options?.Accounts["doc"]));

编译器在这里基本上是在帮助你——任何使用parameters的人以前都可以假设每个对的值部分是非null的,假设它是KeyValuePair<string, string>。有了新代码,他们将被迫/鼓励处理null值。


1我假设在实际代码中,options在其他地方获得,并且可能为空。如果真的options指定了一个绝对不是null的值,那么应该只使用options.Accounts["doc"]

相关内容