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不是。