メンテナンスすることになった他人(他社)が作ったC#ソース(.NET Framework 3.5、コンソールアプリ)で気になる構文があったので質問させてください。
- DBから数百、数千行のデータを取り出す。
- 結果を整形しながらテキストファイルに吐き出す。
という、データエクスポート的な処理のロジックで、テキストファイルに吐き出す前の整形データを下記のようなStrinBuilderのListに格納していました。
CS
1// 事前にDBから取ったデータをDataTableに格納しています 2 3List<StringBuilder> exportList = new List<StringBuilder>(); 4 5foreach (DataRow row in selectedDataTable) 6{ 7 StringBuilder sb = new StringBuilder(); 8 // 各列の内容を整形しながら繋いでいく 9 sb.Append(row["col1"]).ToString()); 10 sb.Append(row["col2"]).ToString()); 11 : 12 sb.Append(row["col10"]).ToString()); 13 // 1行分のデータをStringBuilderごとListに入れる 14 exportList.Add(sb); 15} 16// このあとListの内容をテキストファイルに吐き出す
各列の内容をStringBuilderで繋げて、その結果をstringではなくStringBuilderのままListに追加していっています。上記コードでは省きましたが、最後にまたListをループして、テキストファイルに内容を吐き出して終わりです。列の内容を繋げる部分は実際にはデータの整形(パディングや年月日の書式変更、数値を所定のルールで文字に変換するコード変換など)を行っていますが、上記サンプルでは省いています。
上記のようにListにStringBuilderのインスタンスを大量に突っ込んで使う方法は一般的なのでしょうか?下記2点について情報や御意見をお聞かせください。
- 上記のような用法の問題点
- 逆に、メリットや使い処
自分は、このやりかたはデータが数千件になることを考えると非効率なので、そのままstringをListに突っ込んだ方が断然速いし良いと考え、このコードやプログラム全体の品質について懐疑的になっています。しかし、もしかしたら一般的なやり方で、何か意図や明確なメリットがあるのかもしれない、と思って質問させていただきました。
なお、本件について元の制作者達とは連絡ができず、基本設計レベルの資料よりも深い、詳細設計や開発実装指針、フレームワークの用法、設計意図についてのドキュメント類は皆無という状況です(できあがり品から実装や設計意図を汲み取るしかない……)。
回答4件
あなたの回答
tips
プレビュー