Как я могу ограничить количество символов для ввода с консоли? С#

По сути, я хочу, чтобы в Console.ReadLine() отображалось максимум 200 символов для пользовательского ввода, прежде чем символы начнут подавляться. Я хочу, чтобы это было похоже на TextBox.MaxLength, за исключением ввода с консоли. Как бы я это сделал?

И я не хочу делать input.Substring(0, 200).

Решено:

Я использовал свою собственную функцию ReadLine, которая представляла собой цикл Console.ReadKey().

Это выглядит так, по сути:

StringBuilder sb = new StringBuilder();
bool loop = true;
while (loop)
{
    ConsoleKeyInfo keyInfo = Console.ReadKey(true); // won't show up in console
    switch (keyInfo.Key)
    {
         case ConsoleKey.Enter:
         {
              loop = false;
              break;
         }
         default:
         {
              if (sb.Length < 200)
              {
                  sb.Append(keyInfo.KeyChar);
                  Console.Write(keyInfo.KeyChar);
              }
              break;
         }
    }
}

return sb.ToString();

Всем спасибо


person Marlon    schedule 23.08.2010    source источник
comment
каков общий сценарий?   -  person obelix    schedule 23.08.2010


Ответы (2)


Если вы можете использовать Console.Read(), вы можете выполнять цикл, пока не достигнете 200 символов или пока не будет введена клавиша ввода.

StringBuilder sb = new StringBuilder();
int i, count = 0;

while ((i = Console.Read()) != 13)   // 13 = enter key (or other breaking condition)
{
    if (++count > 200)  break;
    sb.Append ((char)i);
}

ИЗМЕНИТЬ

Оказывается, Console.ReadKey() предпочтительнее Console.Read().

http://msdn.microsoft.com/en-us/library/471w8d85.aspx

person Edward Leno    schedule 23.08.2010

Невозможно ограничить текст, введенный в ReadLine. Как объясняется в статье MSDN,

Строка определяется как последовательность символов, за которой следует возврат каретки (шестнадцатеричное 0x000d), перевод строки (шестнадцатеричное 0x000a) или значение Environment.NewLine

Что вы можете сделать, так это использовать ReadKey в цикле, который не позволяет превышать 200 и прерывается, если пользовательские ключи Environment.NewLine.

person Traveling Tech Guy    schedule 23.08.2010