There're some issues with your code. Please, never write like this (put using instead), and that's why:
StreamWriter writer;
try {
// What if you failed here to create StreamWriter?
// E.g. you haven't got permissions, the path is wrong etc.
// In this case "writer" will point to trash and
// The "finally" section will be executed
writer = new StreamWriter(...)
writer.blahblah();
} finally {
// If you failed to execute the StreamWriter's constructor
// "writer" points to trash and you'll probably crash with Access Violation
// Moreover, this Access Violation will be an unstable error!
writer.Dispose();
}
When you put using
like that
using (StreamWriter writer = new StreamWriter(...)) {
writer.blahblah();
}
It's equal to the code
StreamWriter writer = null; // <- note the assignment
try {
writer = new StreamWriter(...);
writer.blahblah();
}
finally {
if (!Object.ReferenceEquals(null, writer)) // <- ... And to the check
writer.Dispose();
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…