3

我有一个要求,我需要将 .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(我更喜欢使用“使用”代码块来自动处置对象而不是旧式手动处置)

4

3 回答 3

6

之前的TryCastto怎么样:IDisposableUsing

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()任何其他清理方法。

于 2013-01-25T15:33:34.647 回答
2

您将不得不显式地编写与 Using 语句等效的语句。像这样:

    Dim MailServer As New SmtpClient(MailServerName)
    Try
        '' etc..
    Finally
        Dim disp = TryCast(MailServer, IDisposable)
        If disp IsNot Nothing Then disp.Dispose()
    End Try
于 2013-01-25T15:08:16.553 回答
2

以下为我工作(使用.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
于 2013-01-25T15:46:23.520 回答