As a general rule, yes, you should write the code as in the first example.
There are some classes that take ownership of the object passed to it, so that when you dispose the outer object, it automatically disposes of the inner object for you, but that's the exception to the rule.
In any case, calling Dispose
more than once is supposed to be safe. That is, objects should implement that so that it is safe, only doing the work the first time.
So as a general rule, go with the first syntax.
Now, for the specified example, it shouldn't really matter, as a MemoryStream
isn't really holding on to any resources that needs to be disposed of, but there is a problem with that expectation too. If you know that a given version of an object doesn't use a resource, so it's safe to ignore the Dispose
, then if that object in the future gains such a resource, you suddenly gain a leak.
Unless you're seeing some adverse effect with the given code, like adding too much overhead, then I would simply not worry about it.