I think I may be using the Using statement wrong here. What would be a better way of writing this?
Dim x As New Serialization.XmlSerializer( ... )
Using file As New FileStream(myFile, FileMode.Create)
Using writer As XmlWriter = XmlTextWriter.Create(file)
x.Serialize(writer, myCollection)
End Using
End Using
I've read that you're only supposed to use a using
block on objects that have a .Dispose()
(i.e. implements IDisposable), which is why I'm thinking there shouldn't be a Using on "writer", but instead a writer.Close()
at the end. But "file" has both a .Dispose()
and a .Close()
, so which do I use? The using
or file.Close()
?
Note: I'm using an XmlWriter because I can customize the output. I removed the settings here, though.
Both FileStream
and XmlWriter
implement IDisposable
- the code is correct. Actually the compiler probably wouldn't let you do this if it was wrong. If there isn't a public .Dispose()
, then it must be using explicit interface implementation - but that doesn't change your responsibility for calling .Dispose()
. For interest, in C# you can avoid the ever-increasing nesting/indenting, i.e.
using(...a...)
using(...b...)
using(...c...)
{
...
}
but fundamentally your current code is correct.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With