我遇到过这样的例行程序:
static public Bitmap byte2bmp(byte[] BitmapData)
{
MemoryStream ms = new MemoryStream(BitmapData);
return (new Bitmap(ms));
}
我担心这可能不是最好的推荐方法。在这种情况下,ms是否正确处理?
或者将结果分配给临时Bitmap,处理流,然后返回临时对象会更好吗?
static public Bitmap byte2bmp(byte[] BitmapData)
{
MemoryStream ms = new MemoryStream(BitmapData);
Bitmap temp=new Bitmap(ms);
ms.Dispose();
return (temp);
}
我希望在这种情况下可以使用“使用”,但我不确定它是否会表现正常:
static public Bitmap byte2bmp(byte[] BitmapData)
{
using(MemoryStream ms = new MemoryStream(BitmapData))
{
return (new Bitmap(ms));
}
}
什么是最有效/最合适的解决方案?谢谢!
答案 0 :(得分:2)
你担心第一种方法无法进行ms
是正确的。作为一种良好实践,您应该始终对实现Dispose
的对象调用IDisposable
方法。
我建议采用最后一种方法。您可以确信using
语句将按预期处理该对象,即使您在其中间返回也是如此。
以下是代码在运行时分解的方式:首先,将评估返回表达式,然后执行try-finally块(using
statement只是语法糖),最后执行方法将返回。
在using
语句中间返回问题的唯一情况是if you return the variable from the using
statement itself。当然,如果您保留对using
块范围之外的变量的任何引用,这将导致问题。