Вы должны использовать []
нотацию для динамического набора ключей.
var jsonVariable = {};
for(i=1; i<3; i++) {
var jsonKey = i+'name';
jsonVariable[jsonKey] = 'name1';
}
Теперь в ES6 вы можете использовать синтаксис объектного литерала для динамического создания ключей объектов, просто оберните переменную в []
var key = i + 'name';
data = {
[key] : 'name1',
}
Поскольку это - MemoryStream, Вы действительно не делаете потребность для закрытия потока - ничего плохо не произойдет, если Вы не сделаете, хотя, очевидно, это - хорошая практика для расположения чего-либо, что это доступно так или иначе. (См. этот вопрос для больше на этом.)
Однако Вы должны расположить Битовый массив - и это закроет поток для Вас. В основном, как только Вы даете Растровому конструктору поток, он "владеет" потоком, и Вы не должны закрывать его. Как говорится в документах для того конструктора :
необходимо сохранить поток открытым в течение времени жизни Битового массива.
я не могу найти документы, обещающие закрыть поток, когда Вы располагаете битовый массив, но необходимо быть в состоянии проверить это довольно легко.
Скопируйте растровое изображение. Вы должны держать поток открытым в течение всего времени существования растрового изображения.
При отрисовке образа: System.Runtime.InteropServices.ExternalException: в GDI произошла общая ошибка
public static Image ToImage(this byte[] bytes)
{
using (var stream = new MemoryStream(bytes))
using (var image = Image.FromStream(stream, false, true))
{
return new Bitmap(image);
}
}
[Test]
public void ShouldCreateImageThatCanBeSavedWithoutOpenStream()
{
var imageBytes = File.ReadAllBytes("bitmap.bmp");
var image = imageBytes.ToImage();
image.Save("output.bmp");
}