C# 有没有办法制作一个“;使用”;语句在嵌套语句之前终止?

C# 有没有办法制作一个“;使用”;语句在嵌套语句之前终止?,c#,using-statement,C#,Using Statement,当一个字段用于创建另一个字段,然后被释放时,我看到两个选项。第一: Image image = Image.FromFile(path); Bitmap bitmap = (Bitmap)image.GetThumbnailImage(32, 32, null, new IntPtr()); image.Dispose();//not needed anymore. //use bitmap bitmap.Dispose(); 第二: using (Image image = Image.

当一个字段用于创建另一个字段,然后被释放时,我看到两个选项。第一:

Image image = Image.FromFile(path);
Bitmap bitmap = (Bitmap)image.GetThumbnailImage(32, 32, null, new IntPtr());
image.Dispose();//not needed anymore.

//use bitmap

bitmap.Dispose();
第二:

using (Image image = Image.FromFile(path))
{
    using (Bitmap bitmap = (Bitmap)image.GetThumbnailImage(32, 32, null, new IntPtr()))
    {
        //use bitmap
    }
}
逻辑的一个是第一个(因为使用
位图
时不需要
图像
),但是
使用
语句通常比
Dispose
更可取


是否有第三种方法–在第二种方法中使用
终止第一种

是的,有:将生成缩略图的代码放入一个方法中:

Bitmap GetThumbnail(string path)
{
    using (Image image = Image.FromFile(path))
    {
        return (Bitmap)image.GetThumbnailImage(32, 32, null, new IntPtr());
    }
}

// ...

using (Bitmap bitmap = GetThumbnail(path))
{
    //use bitmap
}
请注意:

我同意奥德的评论。我之所以使用这段代码,不是因为它首先处理
图像
,而是因为它更具可读性

创建一个工厂来生成您自己的映像:假设它是MyImage,那么MyImage必须实现IDisposable接口。创建工厂后,将根据您的规则生成图像,然后使用“使用自己的图像”:MyImage。

这对您来说是一个真正的问题吗?@Oded的经验表明,为了避免大规模代码重构,应该在第一时间正确编写。您听说过过早优化吗?在相同的方法中,语句将在大约相同的时间内超出范围,并收集在一起。我看不出您必须获得什么。请注意,
Dispose()
是立即的,而GC不是。