2017-06-10 1 views
-4

Ich versuche eine Konsolen-App zu erstellen, um das Überladen von Methoden zu verstehen. bekam ich Klasse lib wie diesesÜberladene Methode verwendet keine doppelte Eingabe

namespace GetStringName 
{ 
    public class GetString 
    { 
     public void Player(double num) 
     { 
      double number = num * 2; 
      Console.Write(number); 
     } 
     public void Player(string name) 
     { 
      char[] charr = name.ToCharArray(); 
      Array.Reverse(charr); 
      Console.Write(charr); 
     } 
    } 
} 

Und ich habe meine Konsole app wie unten

using GetStringName; 
using System; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      GetString y = new GetString(); 
      y.Player(Console.ReadLine());   
      Console.ReadLine(); 
     } 
    } 
} 

Und was auch immer ich schreibe (string oder integer) es immer tut die Zeichenfolge Sache revert. Kannst du mir bitte sagen, was ich falsch mache?

+0

[ 'Console.ReadLine()'] (https://msdn.microsoft.com/en-us/library/system.console.readline) gibt einen String zurück. Das ist es. –

Antwort

-1

müssen Sie doppelt bieten als ein Parameter an eine Methode, um diese

y.Player(Double.Parse(Console.ReadLine())); 
+0

Was passiert, wenn der Benutzer einen nicht analysierbaren Wert eingibt? –

+0

das ist eine andere Frage. Ich habe auf das Thema geantwortet, warum er auf String-Überlastung stürzt. – DolceVita

+0

So, wenn ich eine Schnur lege, funktioniert es nicht :( – MaciejPL

0

Console.ReadLine versuchen() wird immer eine Zeichenfolge zurück, unabhängig davon, was Sie in Eingabe platzieren. Um Ihre Eingabe als Doppel zu analysieren, müssen Sie entweder double.Parse oder double.TryParse verwenden.

Beispiele:

double input; 
bool success = double.TryParse(Console.ReadLine(), out input); 
if(success) 
{ 
    y.Player(input); 
} 

Oder

try 
{ 
    y.Player(double.Parse(Console.ReadLine())); 
} 
catch(FormatException) 
{ 
    //Input is not a double 
} 
catch(OverflowException) 
{ 
    //Input is out of bounds for a double type 
} 

TryParse einen bool zurückgeben angibt, ob das Parsen erfolgreich war oder nicht, während Parse eine Ausnahme ausgelöst wird, wenn die Eingabe ungültig ist.

Im Allgemeinen bevorzuge ich TryParse immer, es sei denn, Sie möchten den Benutzer speziell wissen lassen, warum ihre Eingabe nicht gültig ist.

3

Es ist, weil Console.ReadLine() Methode String zurückgibt. Wenn Sie TryParse Ihre Eingabe und wenn es eine double ist, wird es Methode für double aufrufen, andernfalls wird es Methode für string aufrufen. Zum Beispiel:

static void Main(string[] args) { 
    GetString y = new GetString(); 
    string input = Console.ReadLine(); 
    double doubleInput; 

    if(double.TryParse(input, out doubleInput)) { 
     y.Player(doubleInput); 
    } else { 
     y.Player(input); 
    } 
} 
Verwandte Themen