Дмитрий, ваше решение на самом деле довольно компактное и прямолинейное. Единственное, что может быть более эффективным, - это сохранить символов разделения строк в сгенерированном массиве, но 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 (), чтобы найти единицу за раз, а затем создать массив самостоятельно. Хотя это значительно больше кода и, вероятно, не обязательно.
Одним из побочных эффектов как вашего решения, так и этого является то, что вы не получите завершающий "\ r \ n" в последней строке, если не было ' Один из них уже есть в TextBox. Это то, что вы ожидаете? А как насчет пустых строк ... вы ожидаете, что они появятся в «строках»?