在项目定义中使用带有<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"]
。