Как установить входное значение по умолчанию в.Net Console App?

Мне нравится предложение Justin, но я добавлю к нему: это решение является большим для изучения языка. Если Вы не полагаетесь на что-то как завершение кода, то оно вынуждает Вас выучить язык лучше. (Если Вы будете работать с чем-то с огромным API, как Java или Какао, тогда Вы захотите завершение кода, однако!)

Это - также агностик языка, и в случае интерпретируемого языка, особенно тот, который имеет интерактивный интерпретатор, Вы, вероятно, проведете такое же время во вводе оболочки/интерпретатора в командах. Даже в проекте Python большого выхода, я все еще работаю в редакторе и 4 или 5 окнах терминала.

Так, прием больше о получении редактора, который работает на Вас. Я не собираюсь предложить один, поскольку это направляется к евангелизму!

12
задан Ronnie Overby 31 October 2009 в 19:25
поделиться

4 ответа

Я считаю, что вам придется управлять этим вручную, слушая каждое нажатие клавиши:

Быстро показанный вместе пример:

   // write the initial buffer
   char[] buffer = "Initial text".ToCharArray();
   Console.WriteLine(buffer);

   // ensure the cursor starts off on the line of the text by moving it up one line
   Console.SetCursorPosition(Console.CursorLeft + buffer.Length, Console.CursorTop - 1);

   // process the key presses in a loop until the user presses enter
   // (this might need to be a bit more sophisticated - what about escape?)
   ConsoleKeyInfo keyInfo = Console.ReadKey(true);
   while (keyInfo.Key != ConsoleKey.Enter)
   {

       switch (keyInfo.Key)
       {
            case ConsoleKey.LeftArrow:
                    ...
              // process the left key by moving the cursor position
              // need to keep track of the position in the buffer

         // if the user presses another key then update the text in our buffer
         // and draw the character on the screen

         // there are lots of cases that would need to be processed (backspace, delete etc)
       }
       keyInfo = Console.ReadKey(true);
   }

Это довольно сложно - вам нужно будет убедиться, что курсор не выходит за пределы допустимого диапазона и вручную обновляет буфер.

7
ответ дан 2 December 2019 в 05:54
поделиться

Или ... Просто проверьте введенное значение, если оно пустое, введите значение по умолчанию.

4
ответ дан 2 December 2019 в 05:54
поделиться

Простое решение: если пользователь ничего не вводит, назначьте значение по умолчанию:

Console.Write("Enter weekly cost: ");
string input = Console.ReadLine();
decimal weeklyCost = String.IsNullOrEmpty(input) ? 135 : decimal.Parse(input);

При работе с пользовательским вводом следует ожидать, что он может содержать ошибки. Таким образом, вы можете использовать TryParse, чтобы избежать исключения, если пользователь не ввел число:

Console.Write("Enter weekly cost: ");
string input = Console.ReadLine(); 
decimal weeklyCost;
if ( !Decimal.TryParse(input, out weeklyCost) ) 
    weeklyCost = 135;

Это будет считаться лучшей практикой для обработки пользовательского ввода. Если вам нужно проанализировать много вводимых пользователем данных, используйте для этого вспомогательную функцию. Один из способов сделать это - использовать метод с обнуляемым значением и возвращать null, если синтаксический анализ не удался. Тогда очень легко назначить значение по умолчанию с помощью оператора объединения с нулевым значением :

public static class SafeConvert
{
    public static decimal? ToDecimal(string value)
    {
        decimal d;
        if (!Decimal.TryParse(value, out d))
            return null;
        return d;
    }
}

Затем, чтобы прочитать ввод и присвоить значение по умолчанию, так же просто:

decimal d = SafeConvert.ToDecimal(Console.ReadLine()) ?? 135;
1
ответ дан 2 December 2019 в 05:54
поделиться

Вы можете использовать вспомогательный метод следующим образом:

public static string ReadWithDefaults(string defaultValue)
{
    string str = Console.ReadLine();
    return String.IsNullOrEmpty(str) ? defaultValue : str;
}
0
ответ дан 2 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: