我有一个要求,我需要将 .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