Dmitri、あなたのソリューションは実際にはかなりコンパクトで簡単です。より効率的な唯一のことは、生成された配列に文字列分割文字を保持することですが、APIは単にそれを許可していません。その結果、すべてのソリューションで配列を反復処理し、何らかの変更を実行する必要があります(C#では毎回新しい文字列を割り当てることを意味します)。私はあなたが望むことができる最善のことは配列を再作成しないことだと思います:
string[] lines = tbIn.Text.Split('\n');
for (int i = 0; i < lines.Length; ++i)
{
lines[i] = lines[i].Replace("\r", "\r\n");
}
...しかし、ご覧のとおり、これははるかに面倒に見えます。パフォーマンスが重要な場合、これは少し良いかもしれません。それが本当に重要な場合は、IndexOf()を使用して文字列を手動で解析し、一度に1つずつ'\ rを見つけてから、自分で配列を作成することを検討する必要があります。ただし、これはかなり多くのコードであり、おそらく必要ではありません。
ソリューションとこのソリューションの両方の副作用の1つは、TextBoxにまだ存在しない場合、最後の行に終了「\ r\n」が表示されないことです。これはあなたが期待することですか?空白行はどうですか...「行」に表示されると思いますか?