[注意:这类似于将字符串与 null 比较 - 为什么 Resharper 认为这总是错误的?,但从来源来看,似乎没有[NotNull]
属性MailMessage.From
。]
考虑这种方法:
public void Send(MailMessage mailMessage)
{
if (mailMessage.From == null)
mailMessage.From = new MailAddress(Settings.SmtpSettings.From);
_smtpClient.Send(mailMessage);
}
ReSharper 7.1.1 警告我mailMessage.From
不能为空。我对此完全感到困惑。
mailMessage.From
是MailAddress
一个类(不是结构),所以我认为它肯定可以为空(尽管我承认它肯定不应该在发送消息时出现)。
这是一张显示我得到的 ReSharper 工具提示的图像:
任何解释为什么 ReSharper 7.1 认为mailMessage.From
不能为空,或者这是一个错误?
更新
于是剧情变厚了……
我写了几个测试并得到了意想不到的结果。
此测试失败:
[Test]
public void FromPropertyOfMailMessageCannotBeNull()
{
var message = new MailMessage();
Assert.IsNotNull(message.From);
}
这个通过了:
[Test]
public void FromPropertyOfMailMessageIsNullIfDefaultConstructorIsUsed()
{
var message = new MailMessage();
Assert.IsNull(message.From);
}
因此,看起来 ReSharper 完全是错误的,MailMessage.From
不能为空。