I was browsing a coworkers c# code today and found the following:
using (MemoryStream data1 = new MemoryStream())
using (MemoryStream data2 = new MemoryS
If there is only one instruction which follow the statement, the bracets are not needed. It is just like with if
statement.
if(true)
{
Console.Writeline("hello")
}
means the same that
if(true)
Console.Writeline("hello")
The same rules apply when you omit the curly braces in a for
or an if
statement.
Incidentally if you reflect into the compiled code, the compiler decompiler adds the braces.
Exactly what he said. The code above is exactly the same as writing:
using (MemoryStream data1 = new MemoryStream())
{
using (MemoryStream data2 = new MemoryStream())
{
// Lots of code
}
}
You can omit the curly braces after an if/else/for/while/using/etc statement as long as there is only one command within the statement. Examples:
// Equivalent!
if (x==6)
str = "x is 6";
if(x == 6) {
str = "x is 6";
}
// Equivalent!
for (int x = 0; x < 10; ++x) z.doStuff();
for (int x = 0; x < 10; ++x) {
z.doStuff();
}
// NOT Equivalent! (The first one ONLY wraps the p = "bob";!)
if (x == 5)
p = "bob";
z.doStuff();
if (x == 5) {
p = "bob";
z.doStuff();
}
Exactly what your colleague said, that is the equivalent of nesting the statements. The dispose for data2
would be called immediately before the dispose function for data1
.
As people have said: given there only being one line following a statement it will work without the curled braces. However, people are neglecting to show in their examples that that one line can be an if/using/for with it's own curled braces. Here is an example:
if(foo)
if(bar)
{
doStuff();
}
Yes, you can also put them in one using statement:
using (MemoryStream data1 = new MemoryStream(),
data2 = new MemoryStream())
{
// do stuff
}