我试图从我的模型中获取字节数组并将其放入文件中。我有这样的方法:
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();
}
Run Code Online (Sandbox Code Playgroud)
此方法工作正常,但可能认为我不需要手动处置StreamWriter,因为我有一个 using 语句。我也这么想,但是当我删除时sw.Dispose();返回ms.ToArray();一个空数组。有人可以向我解释这种行为吗?
你有这行:
using var sw = new StreamWriter(ms);
Run Code Online (Sandbox Code Playgroud)
StreamWriter这仅在方法结束时处理。但是,您在方法结束ms.ToArray() 之前调用。这意味着您在处理ms.ToArray()之前致电。StreamWriter
然而, 正在内部缓冲一些数据,并且仅在处理时StreamWriter将其刷新到。MemoryStream因此,您需要确保在调用StreamWriter 之前ms.ToArray()处理掉.
使用旧语法可能更清楚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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |