2016-04-08 12 views
1

ich diesen Code haben das Ereignis zu behandeln, wenn der Benutzer eine nicht-int Zeichenfolge in einer Anwendung Konsole eingibt:Wie kann ich damit umgehen, wenn int.TryParse (string, out int) nicht in den int passen kann, dh. sie geben Sie eine wirklich große Zahl

 string input = Console.ReadLine(); 
     int num; 
      while (!int.TryParse(input, out num)) 
      {         

       Console.Clear(); 
       Console.WriteLine("Enter a number, try again"); 
       input = Console.ReadLine(); 

      } 

Ofc, es die gleiche „Geben Sie eine Nummer schreibt, versuchen Sie es erneut "Wenn sie eine wirklich große Zahl eingeben. Ich weiß, dass ich es in UI64 oder eine andere große Ganzzahl ändern könnte, aber Sie können immer noch eine Nummer eingeben, die zu groß dafür ist. Gibt es eine einfache Möglichkeit, entweder die TryParse- oder die num-Variable für diese Art von Überlauf zu überprüfen?

+0

verwenden Sie 'BigInteger'. Sie müssen 'System.Numerics' hinzufügen. –

+4

Was werden Sie dem Benutzer sagen, wenn sich herausstellt, dass die Nummer zu groß ist? Sagen Sie ihm einfach, welcher Bereich gültig ist, wie "Bitte geben Sie eine Zahl zwischen 0 und 100 ein". –

Antwort

2

Verwenden Int32.Parse in einer try-catch Aussage:

try { 
    Int32.Parse(string); 
} catch (System.OverflowException e) { 
    // do stuff 
} 
// be sure to catch all other possible exceptions here 

https://msdn.microsoft.com/en-us/library/b3h1hf19(v=vs.110).aspx

Die TryParse Methode behandelt bereits diese Art von Sachen intern und Sie Ausnahmen nicht erlaubt, von Hand zu fangen. Die Parse Methode kann fehlschlagen und wird eine Ausnahme auslösen, so dass Sie alle anderen möglichen Ausnahmen abfangen müssen. Siehe den obigen Link für alle anderen Ausnahmen, die die Methode auslösen könnte.

Die OverflowException tritt auf, wenn der eingegebene Wert niedriger als Int32.MinValue oder höher als Int32.MaxValue ist.

+0

Sie müssen auch andere Ausnahmen abfangen, indem Sie am Ende einen weiteren catch-Block hinzufügen –

+0

Wie ich in meiner Antwort gesagt habe, müssen Sie alle anderen möglichen Ausnahmen abfangen. Ich werde es noch etwas klären. –

+0

ich sehe. aber eine einzige Zeile 'catch {}' wird genügen. Beachten Sie, dass die Reihenfolge wichtig ist. Es sollte nach dem Auffangen der Überlauf-Ausnahme sein. –