gpt4 book ai didi

c# - 在实现 IDisposable 的类上正确使用 Dispose 方法

转载 作者:行者123 更新时间:2023-11-30 14:02:41 25 4
gpt4 key购买 nike

我今天正在处理一些使用 System.Net.Mail.MailMessage 类的代码

public MailMessage CreateMessage(string fromAddress, string recipient)
{
MailMessage message = new MailMessage(fromAddress, recipient);
message.Subject = subject;
message.Body = body;
return message;
}

忽略此方法的微不足道的性质,我收到一条编译器警告

object 'message' is not disposed along all exception paths. Call System.IDisposable.Dispose on object 'message' before all references to it are out of scope.

这很有趣,因为编译器警告消息在超出范围之前未被处理,但我假设返回对它的引用意味着虽然消息变量超出范围,但它仍然是对底层对象的引用,在这种情况下,我非常怀疑我是否想要处置它。

这让我有点困惑,因为警告消息的含义是您不应该退回一次性元素。真的是这种情况还是这只是编译器警告发疯的情况?

最佳答案

这个警告的意思是如果方法抛出(例如在 Subject setter 中),你可能会留下一个未处理的 MailMessage ,没有人引用它.

你应该通过这样的方式来防止这种情况的发生:

public MailMessage CreateMessage(string fromAddress, string recipient)
{
MailMessage message = new MailMessage(fromAddress, recipient);
try {
message.Subject = subject;
message.Body = body;
return message;
}
catch {
if (message != null) {
message.Dispose();
}
throw;
}
}

编译器没有任何反对返回 IDisposable 实例的东西:)

关于c# - 在实现 IDisposable 的类上正确使用 Dispose 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5466768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com