2015-10-29 2 views
1

Я создаю календарь. Здесь я хочу добавить участников на свою встречу. После каждого имени я хочу нажать Enter, чтобы добавить его. Когда я нажимаю, например X Я хочу оставить процесс «добавить участника» и перейти к следующему шагу, например, «добавить название собрания».Добавление значений в массив строк в C#

Как добавить участников в массив? Как я могу перейти к следующему шагу, когда я закончил вводить имена? Этот код не работает:

Console.Write("Enter members here: "); 
memberList = Console.ReadLine(); 

string[] memberList; 
+5

Ваш код показывает консольное приложение, но вы говорите о нажатии кнопки ... это графический интерфейс или консольное приложение? –

+0

Консоль. При нажатии «enter» я подразумеваю кнопку клавиатуры. Я не знаю, как это работает, поэтому это единственное логическое решение. – user5462581

+0

Ну, это было «Когда я нажимаю кнопку f.e.» X «Я хочу оставить процесс добавления участника» - так что вы хотите, если пользователь хочет добавить член с именем X? –

ответ

5

Для этого вам понадобится условный цикл, цикл while будет работать очень хорошо.

Кроме того, с использованием List<string> было бы лучше в этом сценарии, так как вы (i) должны добавить к нему что-то, и (ii) вы не знаете, как большой массив, когда вы его сначала объявляете, Не знаете, сколько имен будет введено пользователем.

Что-то вроде:

var names = new List<string>(); 
var input = Console.ReadLine(); 

while (input.ToUpper() != "X") 
{ 
    names.Add(input); 
    input = Console.ReadLine(); 
} 


foreach (var name in names) 
{ 
    Console.WriteLine(name); 
} 

Если Вы желаете, чтобы перейти к следующему шагу сразу после того, как пользователь нажимает X (без них не нужно нажимать Enter ), вы можете посмотреть в использовании Console.ReadKey, но это было бы более сложным, так как вам нужно было собрать по одному символу за раз, чтобы получить имя и проверить, нажата ли клавиша . Введите, и в этом случае вы перейдете к следующему имени. Существует также сложность, известная, когда «Х» является лишь частью чьего-либо имени, например. Ксавье, или он должен был перейти к следующему шагу.

+0

Похоже, я предусмотрел ответ. Используйте List <>, если вы хотите динамическое распределение, а не массив (возможно, захотите, чтобы Console.Write внутри цикла там где-то был) – jazza1000

+0

Когда я хочу увидеть результат, и я пишу 'Console.WriteLine (имена);' он говорит 'System.Collections.Generic.List 1 [System.String]' – user5462581

+1

@ user5462581 Я обновил свой ответ, чтобы показать, как вы будете перебирать список имен.К сожалению, метод 'ToString' типа' List <> '(который, я считаю, вызывает то, что вызывает' Console.WriteLine'), не показывает, что находится в списке. Было бы неплохо, если 'List .ToString()' будет вызывать 'ToString' для каждого из своих элементов, не так ли? :) –

2

Предполагая, что тип пользователей в следующем: «Джейк, Джулия, Крэйг»

string[] memberlist = Console.ReadLine().Split(','); 

В конце концов, вам нужно .trim() по каждому имени тяжбы пробел после запятой.

Редактировать: Для «многострочного» решения посмотрите сообщение @Jeff Bridgman.

+2

Я не вижу никаких указаний на то, что OP хочет использовать список имен, разделенных запятыми. –

+0

Да, видел это тоже сейчас. Связано с решением @Jeff Bridgman. Хотя ничего не говорит против разделенного запятой ввода. – Camo

Смежные вопросы