エレガントについてはわかりませんが、:
- 文字列の操作にはStringBuilderを使用します。文字列型は不変です!
- 間に何かを行う必要がある場合は、実行中の最初または最後のサイクルを分離します(コンマ分離など)。したがって、基本的には次のようになります。
StringBuilder multiLine = new StringBuilder();
foreach (DataGridViewRow r in dgvSm.Rows)
{
if (!r.IsNewRow)
{
if (r.Cells.Count > 0)
{
multiLine.Append(r.Cells[0].Value.ToString()); //first separated
for (int i = 1; i < r.Cells.Count; ++i)
{
singleLine.Append(','); //between values
singleLine.Append(r.Cells[i].Value.ToString());
}
multiLine.AppendLine();
}
}
}
StringBuilder連結(文字の動的配列のみ)と文字列(演算子+連結を使用するたびに新しいオブジェクトとすべてをコピーする)の速度の違いを説明するために、ミニプログラムを見てください。
public static void Main()
{
var sw = new Stopwatch();
sw.Start();
StringBuilder s = new StringBuilder();
//string s = "";
int i;
for (i = 0; sw.ElapsedMilliseconds < 1000; ++i)
//s += i.ToString();
s.Append(i.ToString());
sw.Stop();
Console.WriteLine("using version with type " + s.GetType().Name + " I did " +
i + " times of string concatenation.");
}
私のコンピューターの場合は次のとおりです。
文字列型のバージョンを使用して、17682回の文字列連結を実行しました。StringBuilder
タイプのバージョンを使用して、366367回の文字列連結を実行しました。