Примечание: Этот ответ больше относится к абстрактной задаче подсчета строк в строке, нежели к части графического интерфейса. Это, вероятно, не так полезно, как некоторые другие ответы для исходного вопросника, но я подозреваю, что это полезно в подобных ситуациях, которые не связаны с графическим интерфейсом. Если достаточное количество людей сочтет, что это не актуально, я удалю их.
Я бы использовал существующий тип, который уже знает об окончаниях строк, а именно TextReader
, в сочетании с моим типом LineReader
из MiscUtil :
string text = "ab\ncd";
int lines = new LineReader(() => new StringReader(text)).Count();
В качестве альтернативы, без зависимостей:
public IEnumerable<string> GetLines(string text)
{
using (TextReader reader = new StringReader(text))
{
string line;
while ((line = reader.ReadLine()) != null)
{
return line;
}
}
}
, то:
int lineCount = GetLines(text).Count();
Обратите внимание, что здесь будут учитываться фактические строки текста, а не разрывы строк - это может незначительно отличаться от того, что вы хотите (например, обычно это будет разрывы строк + 1, но не в том случае, если в конце текста есть разрыв строки ).