gpt4 book ai didi

c# - 如果未处理 StreamWriter,MemoryStream.ToArray() 返回空数组

转载 作者:行者123 更新时间:2023-12-05 08:29:27 25 4
gpt4 key购买 nike

我正在尝试从我的模型中获取字节数组以将其放入文件中。我有这样的方法:

        public static byte[] GetByteArray(List<MyModel> models)
{
using var ms = new MemoryStream();
using var sw = new StreamWriter(ms);

foreach (var model in models)
{
sw.Write(model.Id + "," + model.Name);
sw.WriteLine();
}

sw.Dispose();
return ms.ToArray();
}

此方法工作正常,但我可能认为我不需要手动处理 StreamWriter,因为我有一个 using 语句。我也这么想,但是当我删除 sw.Dispose(); 时,ms.ToArray(); 返回一个空数组。有人可以向我解释这种行为吗?

最佳答案

你有这条线:

using var sw = new StreamWriter(ms);

这只会在方法结束时处理 StreamWriter。但是,您是在 ms.ToArray() 方法结束之前调用的。这意味着您在释放 StreamWriter 之前调用 ms.ToArray()

但是,StreamWriter 正在内部缓冲一些数据,并且仅在处理时将其刷新到 MemoryStream。因此,您需要确保在 调用 ms.ToArray() 之前处理 StreamWriter

使用旧的 using 语法可能更清楚,它明确说明何时发生处置:

public static byte[] GetByteArray(List<MyModel> models)
{
using var ms = new MemoryStream();
using (var sw = new StreamWriter(ms))
{
foreach (var model in models)
{
sw.Write(model.Id + "," + model.Name);
sw.WriteLine();
}
}

return ms.ToArray();
}

关于c# - 如果未处理 StreamWriter,MemoryStream.ToArray() 返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70215381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com