2013-06-24 4 views
3

Мне нужен метод, который обеспечит, чтобы я вводил правильные типы значений, и это приведет меня к тому, что я должен ввести их снова. Мне не нужна рекурсия, чтобы перейти к началу метода, мне нужно что-то, чтобы добраться до того места, где я ввожу значения. Я знаю, что я должен использовать циклы, но я не знаю, как это сделать. Это часть метода:Loop in try catch block

console.writeline("Enter your value"); 
double kv = 0; 
try 
{ 
    kv = Convert.ToDouble(Console.ReadLine()); 
} 
catch (FormatException) 
{ 
    Console.WriteLine("Enter a number"); 
} 
+3

Не используйте try..catch для ожидаемого поведения (например, ввод строки, не конвертируется в два раза). Используйте [Double.TryParse] (http://msdn.microsoft.com/en-us/library/system.double.tryparse.aspx) – mbeckish

ответ

6

Использование Double.TryParse вместо Try/уловом:

Console.Writeline("Enter your value"); 
double kv; 
while (!Double.TryParse(Console.ReadLine(), out kv)) 
    Console.WriteLine("Enter a number"); 
+0

@Servy Я не уверен, что вы имеете в виду; ваш ответ выглядит идентичным, за исключением того, что вы завершаете все функции. – Zong

+0

С тех пор вы его отредактировали, это было не раньше. – Servy

+0

@Servy Да, извините, я отредактировал 3 раза в промежутке 10 секунд, поскольку понял, что совершил ошибки. :) – Zong

6

Вы можете следить за этой конкретной схеме:

var data = GetValueFromUser(); 
while(!IsValid(data)) 
{ 
    InformUserTheirDataIsBad(); 
    data = GetValueFromUser(); 
} 
//data is now valid 
2

Используйте TryParse

 double kv = 0; 
     Console.WriteLine("Enter your value"); 
     while (double.TryParse(Console.ReadLine(), out kv) == false) 
     { 
      Console.WriteLine("Enter your value"); 
     } 
+0

Почему вы используете '== false' вместо того, чтобы просто добавлять'! '(Логический не)? –

+1

@JeppeStigNielsen, потому что '! Condition' больше похоже на' condition', чем 'condition == false'. –

-1

Вы можете использовать do while петля тоже:

double kv = 0; 
bool invalid = false; 
do 
{ 
    console.writeline("Enter your value");  
    try 
    { 
     kv = Convert.ToDouble(Console.ReadLine()); 
     invalid = false; 
    } 
    catch (FormatException) 
    { invalid = true;} 
} while (invalid); 
+2

Вы не должны использовать исключения для потока управления. Кроме того, это переходит в бесконечный цикл; вы никогда не устанавливаете 'invalid' в false. – Servy

+0

Я согласен с тобой, я просто показывал другой путь. Я думаю, что OP просто пытается узнать некоторые циклы. – unlimit

+0

Ваш «другой способ» на самом деле не работает. – Servy