c# - 为什么 ReSharper 认为 MailMessage.From 不能为空?

标签 c# resharper resharper-7.1

[注意:这类似于Compare string to null - Why does Resharper think this is always false? ,但从源代码来看,MailMessage.From 上似乎没有[NotNull] 属性。]

考虑这个方法:

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,它是一个类(不是结构),所以我认为它肯定可以为 null(尽管我承认它当然不应该' t 是在发送消息时)。

这是一张显示我得到的 ReSharper 工具提示的图片:

ReSharper indicating that mailMessage.From == null is always false

ReSharper 7.1 认为 mailMessage.From 不能为 null 的任何解释,或者这是一个错误?

更新

所以情节变厚了......

我写了几个测试并得到了意想不到的结果。

这个测试失败了:

[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 不能为 null。

最佳答案

这是 ReSharper 注释中的一个错误。在 .netFramework 4.0 中,此属性在其 setter 中检查空值,但在 MailMessage 类的默认构造函数中不保证非空值。我为此记录了一个问题:http://youtrack.jetbrains.com/issue/RSRP-337152

关于c# - 为什么 ReSharper 认为 MailMessage.From 不能为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14095820/

相关文章:

nunit - 为什么 Resharper 不接受我的 NUnit 测试?

visual-studio-2012 - "var"的 VS2012 JavaScript IntelliSense 不工作?

c# - 在一个线程中调用 Add on SortedDictionary 并在另一个线程中获取 Item 是否安全?

asp.net-mvc-3 - Request.Url什么时候可以为空?

visual-studio - 与解决方案团队共享reshaper和stylecop设置

c# - Resharper 警告将枚举转换为 UIntPtr,但没有编译器警告

c# - ReSharper 7.1 "To Property with Backing Field"将字段移出位置

c# - 亚马逊 MWS 的产品 Feed

c# - Windows 性能计数器从 PerfMon 中消失

c# - 使用 REST API 的设计模式