c# - “使用”输出参数
问题描述
假设我有一个简单的一次性类:
class CanDispose : IDisposable
{
...
}
现在我显然可以将它放在“使用”块中以使其处置:
using (var myDisposable = new CanDispose())
{
...
}
但是,如果我有一个通过 out 参数返回一次性的工厂方法怎么办?在我的示例中,可以有多个回报,因此多个出局是干净的:
public bool CreateDisposable(out CanDispose canDispose)
{
canDispose = new CanDispose();
...
return ret;
}
如何将其放在 using 语句中?简单地将函数调用放入 using 块似乎不起作用。我是否必须求助于返回元组(这行得通吗?),还是有更简单的方法?
请注意,这似乎不起作用。至少它不会在超出范围之前关闭关于处置的警告:
using (CreateDisposable(out CanDispose myDispose))
{
....
}
解决方案
using
语句不必声明变量。将一次性作为out
参数并不理想,您应该在自己的代码中避免使用它,但是如果您正在使用执行此操作的库,则可以using
在调用方法后简单地将变量放入块的表达式中。
CreateDisposable(out CanDispose myDispose);
using (myDispose)
{
}
推荐阅读
- docker - 如何让 nginx 日志显示在 prometheus 中?
- ios - ARKit World Maps – 如何使用自定义 UTI 文件类型保存/访问?
- vba - 允许在一个打开的工作簿中使用 UDF,但使其在另一个工作簿中不可见/不可用/不可访问
- python - 僵尸 zeppelin-spark 进程的来源是什么?
- linux - 如果不在同一目录中,则无法运行配置文件
- c - 从 word 文档中删除段落标签只会导致 microsoft word 损坏
- javascript - 用javascript代码块替换html块,在“文档”错误上执行“写入”失败
- python - Python。多处理池。如何获得所有结果
- android - 当应用程序安装在 SD 卡上而不是内部存储上时,DownloadManager 会广播 DownloadManager.ERROR_FILE_ERROR
- azure-devops - VSTS REST API 缓存