Рейтинг:
4
OriginalGriff
Если вы попробуете сделать это вот так:
string[] A = "A B D".Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
string[] B = "A C D".Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
IEnumerable<string> res = from set in A.Intersect(B) select set;
foreach (var str in res)
{
Console.WriteLine(str);
}
Вы получите именно то, что ожидаете:
A
D
Ваш код этого не делает - вы получаете "просто D", потому что внутри цикла вы устанавливаете содержимое текстового поля на определенное значение каждый раз, а затем перезаписываете его при следующем выполнении цикла. Таким образом, Вы получаете "D", а "A" отбрасывается.
Что вы можете сделать, так это добавить каждую строку в свойство TextBox Text, или вы можете сделать это вместо цикла:
result.Text = string.Join(" ", res);
Что даст вам пересечение в виде списка, разделенного пробелом.
Cee08
Я получил результат as только тогда, когда попробовал первый блок кодов. Я также заменил результат.Ул. текст = результат.Текстовая строка.Join(" ", res), но это все равно не дает никакого результата
OriginalGriff
Попробуйте еще раз и используйте консоль.WriteLine - на самом деле, попробуйте мой код точно.
Вы получите
Один
Д
Единственный способ получить A в одиночку-это если "D" не является членом обоих входных наборов.
Когда это сработает, попробуйте сделать то же самое с помощью текстовых полей.
Cee08
Спасибо, это работает. Но как я могу получить пользовательский ввод из текстовых полей и отобразить результат вместо установки значений по умолчанию? Я применил те же коды, используя метод объединения, и он работает просто отлично. У меня есть только эта проблема с пересечением.
OriginalGriff
"Когда у вас это работает, попробуйте то же самое с помощью текстовых полей."
Так что сделай это. Когда вы знаете, что код работает, добавьте переменную обратно - пользовательский ввод.
Если это не сработает, то вы знаете, что то, что вы используете в качестве входных данных, не то, что вы ожидали, поэтому вам нужно внимательно посмотреть на него - я бы предложил использовать отладчик - чтобы выяснить, чем он отличается.
Cee08
Спасибо OriginalGriff. Я попытался заменить string[] A = textBox1.Text.Split(new string[] { "" }, StringSplitOptions.RemoveEmptyEntries) со строкой[] A = textBox1.Text.Split(new Char[] { ',' }) и теперь он работает.
OriginalGriff
Значит, ваш ввод разделен запятыми, а не пробелом? Теперь вы знаете, почему это не сработало!
Кстати: существует перегрузка Split, которая делает ваш код более читабельным, если вам не нужны опции:
string[] A = textBox1.Text.Split(',');
Сделайте себе одолжение тоже - перестаньте использовать имена Visual Studio по умолчанию для всего - вы можете помнить, что "TextBox8" - это номер мобильного телефона сегодня, но когда вам придется изменить его через три недели, вы это сделаете? Используйте описательные имена - например, "tbMobileNo", - и ваш код станет легче читать, более самодокументируемым, легче поддерживать - и на удивление быстрее кодировать, потому что Intellisense может добраться до "tbMobile" за три нажатия клавиш, где "TextBox8" занимает размышление и 8 нажатий клавиш...
Cee08
Я приму это к сведению, спасибо за ваше терпение :)
OriginalGriff
Всегда пожалуйста!