我需要创建一个生成二进制(4个字节长)的方法,接收整数List并在文件中逐个写入此List。所以,我有这个:
public void FrameCodesBinaryWriter(List<int> frameCodes)
{
using (FileStream fileStream = new FileStream(binaryFilePath, FileMode.Create)) // destiny file directory.
{
using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
{
for (int i = 0; i < frameCodes.Count; i++)
{
binaryWriter.Write(frameCodes[i]);
}
binaryWriter.Close();
}
}
}
这是对的吗?或其他一些解决方案
答案 0 :(得分:1)
因为它应该可以正常工作。这是一个重构版本,您可以选择您喜欢的重构位。
public void WriteFrameCodesAsBinary(IEnumerable<int> frameCodes)
{
using (FileStream fileStream = new FileStream(binaryFilePath, FileMode.Create))
using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
{
foreach (int frameCode in frameCodes) {
binaryWriter.Write(frameCode);
}
}
}
我会重命名该函数来描述它将要执行的操作。 FrameCodesBinaryWriter
听起来更像是我的班级名称。
如果您不需要List<T>
的排序,则可能接受IEnumerable<T>
。通过这种方式,您可以更灵活地传递内容。
有些人喜欢堆叠他们的using语句来删除一层嵌套(代码缩进)。就我个人而言,我并不是一个忠实的粉丝,但这是个人品味和风格的问题。
使用IEnumerable<T>
强制我们使用foreach
,但即使使用List<T>
,它也可以看起来更清晰/让您更清楚地浏览列表。
如前所述,如果您使用using
,则无需显式关闭二进制编写器 - 这将在退出using
块时自动完成。
答案 1 :(得分:0)
您无需关闭binaryWriter
,因为您还有using
子句。 binaryFilePath
需要成为班级的一个领域,除了看起来不错。