1

バイナリ(4バイト長)を生成し、整数のリストを受け取り、このリストを1つずつファイルに書き込むメソッドを作成する必要があります。だから、私はこれを持っています:

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();
        }
    }
}

これは正しいです?または他の解決策をお願いします

4

2 に答える 2

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ブロックが終了したときに自動的に行われます。

于 2011-04-18T18:19:55.090 に答える
0

とにかく句binaryWriterがあるので、閉じる必要はありません。それが大丈夫に見えることを除けば、クラスのフィールドである必要があります。usingbinaryFilePath

于 2011-04-18T17:09:51.310 に答える