类型为"System.Net.Mail.SmtpClient"的 vb'Using' 操作数必须实现 'System.IDisposable' - (.NET 3.5)



我有一个要求,我需要将 .NET 4.0 项目转换为 .NET 3.5 项目,除了"SmtpClient"之外,其他一切都很好到目前为止,我发现.NET 3.5 SmtpClient没有实现IDisposable,而在.NET 4.0中它实现了!

下面是在 上工作正常的代码。NET4.0 但不在 .NET3.5:

Using MailServer As New SmtpClient(MailServerName)
MailServer.Credentials = New System.Net.NetworkCredential(MailServerUserName, MailServerPassword)
SendMail(MailServer, msgBody, msgSubject, FromEmail, ToEmail)
End Using
知道如何使用 .

NET 3.5 进行操作(我更喜欢使用"使用"代码块自动处置对象,而不是旧式手动处置)

Using之前IDisposable TryCast怎么样:

Dim MailServer As New SmtpClient(MailServerName)
Using TryCast(MailServer, IDisposable)
    MailServer.Credentials = New System.Net.NetworkCredential(MailServerUserName, MailServerPassword)
    SendMail(MailServer, msgBody, msgSubject, FromEmail, ToEmail)
End Using

如果在 .NET 4.0 中运行,TryCast()将返回SmtpClient,因为它实现了 IDisposable。

如果在 .NET 3.5 中运行,则TryCast()将返回Nothing,并忽略Using

在 .NET 3.5 中SmtpClient似乎不需要任何清理,因为据我所知,它们没有提供Dispose()或任何其他清理方法。

您必须显式编写 Using 语句的等效项。 喜欢这个:

    Dim MailServer As New SmtpClient(MailServerName)
    Try
        '' etc..
    Finally
        Dim disp = TryCast(MailServer, IDisposable)
        If disp IsNot Nothing Then disp.Dispose()
    End Try

以下内容对我有用(使用 .NET 3.5):

Dim MailServer = New SmtpClient(MailServerName)
Using TryCast(MailServer, IDisposable)
    MailServer.Credentials = New System.Net.NetworkCredential(MailServerUserName,MailServerPassword)
    SendMail(MonthlyMailServer, msgBody, msgSubject, FromEmail, ToEmail)
End Using

相关内容

最新更新