c# - 为什么代码块是分层的?额外积分 : Beautiful way to write my code block

标签 c# code-formatting

假设我想使用 2 个实现 IDispose 模式的类。其中一个类使用另一个类进行实例化,但之后就不需要了。当堆叠“使用”关键字时,这将导致(例如)在使用字体期间锁定文件。出于“编码美观”的原因,我希望文件在完成后立即解锁。

看看下面的“类标签”系统。

using1 (Stream stream = File.OpenRead("font.ttf"))
using2 (Font font = FontExtensions.FromStream(stream, 32))
ENDusing1
//use font here
ENDusing2

分层方式,代码块的设计方式,对当前的处理施加了(美观)限制。当然,这可以通过使用 try/finally block 来解决,但它们并不是那么整洁。

我是否缺少使用(大笑?)嵌套 IDisposable 对象/流的基本设计?

请分享您对标签代码块的看法以及解决此问题的最佳方法(编码之美)。

最佳答案

您可以嵌套使用,同时关闭甚至过早处置流。

using (Stream stream = File.OpenRead("font.ttf")) {
    using (Font font = FontExtensions.FromStream(stream, 32)) {
        stream.Close(); // Or stream.Dispose();

        //use font here
    }
}

FileStream 类在内部使用一个标志来了解它是否已被关闭或处置,并确保这种情况不会发生两次。 Dispose 方法只是调用 Close 方法。

关于c# - 为什么代码块是分层的?额外积分 : Beautiful way to write my code block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515997/

相关文章:

c# - 如何在 LINQ 查询中获得与 ISNULL 相同的功能

c# - 自定义错误处理和日志

c# - 为什么我的绑定(bind) List<T> 使用 foreach 循环返回空以在 razor 页面上显示值?

c++ - Google C++ 风格指南的 AStyle

java - 格式化代码时保持语句彼此相邻

c# - 如何使 WPF 菜单看起来像 Windows 窗体 ToolStripMenu?

c# - 尝试更改目标框架时从 Visual Studio 收到拒绝访问错误

ftp - 如何防止文件中出现空行或一行中的所有代码以及如何重新格式化它们?

带有表达式的 C++ 初始化列表

c++ - 是否有一个自动源代码格式化程序可以很好地包装 C/C++ 行?