C# Как заполнить ComboBox строками из RichTextBox, если критерии удовлетворены - PullRequest
1 голос
/ 17 февраля 2020

Я пытаюсь заполнить поле со списком строками из расширенного текстового поля. Но только если последние 6 символов строки в поле расширенного текста содержат строку «устройство». Я не знаю, сколько строк в поле расширенного текста и количество строк, которые содержат строку «устройство», до времени выполнения.

Допустим, есть 6 строк в поле со списком и 2 элемента, которые содержат строка «устройство». Но оба числа могут изменяться и изменяются во время выполнения.

int IntCountLines равно количеству строк в поле расширенного текста. int IntNumberOfDevices равно числу строк, которые содержат строку «устройство» (в последних 6 символах) в поле расширенного текста.

Первая строка [0] в поле расширенного текста всегда игнорируется. Итак, начиная со строки [1].

Если строка 1 в поле расширенного текста содержит строку «устройство», я хочу добавить ее в поле со списком. Если этого не произойдет, перейдите к строке 2 и проверьте это. Если он содержит строку «устройство», добавьте его в поле со списком. Если этого не происходит, перейдите к строке 3 и т. Д.

int IntCountLines

int IntNumberOfDevices.

Имя Richtextbox: RtxtAdbOutput.

ComboBox имя: CmbIPs.

У меня есть:

StrTmpOutput = rtxtAdbOutput.Lines[1].Substring(rtxtAdbOutput.Lines[1].Length - 6);

if (StrTmpOutput == "device")
{
    CmbIPs.Items.Add(rtxtAdbOutput.Lines[1].Remove(rtxtAdbOutput.Lines[1].Length - 7));
}



StrTmpOutput = rtxtAdbOutput.Lines[2].Substring(rtxtAdbOutput.Lines[2].Length - 6);

if (StrTmpOutput == "device")
{
    CmbIPs.Items.Add(rtxtAdbOutput.Lines[2].Remove(rtxtAdbOutput.Lines[2].Length - 7));
}


StrTmpOutput = rtxtAdbOutput.Lines[3].Substring(rtxtAdbOutput.Lines[3].Length - 6);

if (StrTmpOutput == "device")
{
    CmbIPs.Items.Add(rtxtAdbOutput.Lines[3].Remove(rtxtAdbOutput.Lines[3].Length - 7));
}

И так далее. Но не знаю количество строк, пока время выполнения не означает, что я не знаю, как долго продолжать добавлять операторы if. Кроме того, он выдает ошибки, если это пустая строка (так как он пытается убрать 7 символов с конца строки, которая не существует, хотя я мог бы добавить некоторую проверку ошибок, чтобы остановить это).

Есть ли В любом случае я могу улучшить это с помощью для l oop или подобного?

Я хочу продолжать делать это, пока количество строк, добавленных в выпадающий список, не совпадет со значением IntNumberOfDevices.

1 Ответ

1 голос
/ 17 февраля 2020

Вы можете использовать комбинацию метода List<T>.ForEach() и String.EndsWith()

rtxtAdbOutput.Lines.ToList()
    .GetRange(1, rtxtAdbOutput.Lines.Count() - 1)
    .Where(line => line.EndsWith("device")).ToList()
    .ForEach(validLine => CmbIPs.Items.Add(validLine.Remove(validLine.Length - 7)));

Для этого в качестве списка получаются все строки с индексом выше 0, а затем выбирается те, которые заканчиваются на «устройство» с помощью String.EndsWith, затем для каждого из них добавляет их в поле со списком, используя ForEach().

DotnetFiddle, демонстрируя это

String.EndsWith документация

Список.Для каждой документации

...