Microsoft文档在此页面上具有以下代码:
最内部的“使用”语句假定要处理csEncrypt,而这又假定要处理msEncrypt流。但是,紧接在最内部的using语句作用域之后,msEncrypt仍然处于活动状态并被使用(调用了它的ToArray())。
谁能解释在外部using语句中声明的流的生命范围是什么?
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//Write all data to the stream.
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}
如果对象的Dispose方法被多次调用,则该对象必须忽略第一个之后的所有调用。如果多次调用其Dispose方法,则该对象不得引发异常。大多数人甚至建议禁止显示此警告。更多信息here。您的代码的重构版本可能是这样的:
MemoryStream msEncrypt = new MemoryStream();
CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
StreamWriter swEncrypt = new StreamWriter(csEncrypt)
//Write all data to the stream.
swEncrypt.Write(plainText);
encrypted = msEncrypt.ToArray();
//Do more work if needed.
//if you need to dispose of them manually and the current scope hasn't ended then just do:
swEncrypt.Dispose();
或者如果您想维护using
语句,则遵循模式here。