【发布时间】:2021-08-23 21:08:33
【问题描述】:
下面的代码给了我一个警告,但我不明白为什么。
client.Host = Settings.Host;
警告 CS8601:可能的空引用分配。
client 和 Settings 在这里都不为空。 client.Host 和 Settings.Host 都是 string? 类型。
因此,虽然它可能是一个可能的 null 引用赋值,但这并不重要,因为目标变量允许为 null。
【问题讨论】:
-
虽然
SmtpClient.Host确实是一个可为空的字符串,但使用setter 将其设置为null 将抛出ArgumentNullException。请参阅来源here。编译器可能只是巧妙地推断出这一点(它具有DisallowNull属性)。 -
@sellotape:这是一个非常具体的警告,我不认为这是考虑到 setter 可能抛出异常的事实。但是,该属性标有
[DisallowNull]的事实几乎可以肯定是问题所在。即使数据类型允许,编译器也会看到此属性并警告潜在的空值。
标签: c# .net-5 nullable nullable-reference-types