Мне нравится предложение Justin, но я добавлю к нему: это решение является большим для изучения языка. Если Вы не полагаетесь на что-то как завершение кода, то оно вынуждает Вас выучить язык лучше. (Если Вы будете работать с чем-то с огромным API, как Java или Какао, тогда Вы захотите завершение кода, однако!)
Это - также агностик языка, и в случае интерпретируемого языка, особенно тот, который имеет интерактивный интерпретатор, Вы, вероятно, проведете такое же время во вводе оболочки/интерпретатора в командах. Даже в проекте Python большого выхода, я все еще работаю в редакторе и 4 или 5 окнах терминала.
Так, прием больше о получении редактора, который работает на Вас. Я не собираюсь предложить один, поскольку это направляется к евангелизму!
Я считаю, что вам придется управлять этим вручную, слушая каждое нажатие клавиши:
Быстро показанный вместе пример:
// 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);
}
Это довольно сложно - вам нужно будет убедиться, что курсор не выходит за пределы допустимого диапазона и вручную обновляет буфер.
Или ... Просто проверьте введенное значение, если оно пустое, введите значение по умолчанию.
Простое решение: если пользователь ничего не вводит, назначьте значение по умолчанию:
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;
Вы можете использовать вспомогательный метод следующим образом:
public static string ReadWithDefaults(string defaultValue)
{
string str = Console.ReadLine();
return String.IsNullOrEmpty(str) ? defaultValue : str;
}