Как правило, да, вы должны написать код, как в первом примере.
Есть некоторые классы, которые берут на себя ответственность за передаваемый ему объект, поэтому, когда вы удаляете внешний объект, он автоматически избавляется от внутреннего объекта за вас, но это исключение из правила.
В любом случае, вызов Dispose
более одного раза считается безопасным. То есть объекты должны реализовывать это так, чтобы это было безопасно, делать работу только в первый раз.
Так что, как правило, используйте первый синтаксис.
Теперь для указанного примера это не должно иметь большого значения, поскольку MemoryStream
на самом деле не удерживает ресурсы, которые необходимо утилизировать, но с этим ожиданием тоже есть проблема. Если вы знаете, что данная версия объекта не использует ресурс, поэтому можно игнорировать Dispose
, тогда, если этот объект в будущем получит такой ресурс, вы внезапно получите утечку.
Если вы не столкнулись с каким-либо неблагоприятным эффектом в данном коде, например добавлением слишком большого количества служебной информации, я бы просто не беспокоился об этом.