Entwickler-Ecke
C# - Die Sprache - Alternative zur nicht mehr vorhandenen ToInt32() Methode
pluto_0814 - Di 08.09.09 15:36
Titel: Alternative zur nicht mehr vorhandenen ToInt32() Methode
Hallo zusammen,
ich lerne gerade C# anhand eines alten Tutorials.
IDE = VS 2010 beta
Folgendes Übungsprogramm steigt mir aufgrund der
im Netframework nicht mehr vorhandenen ToInt32()
Methode aus.
Fehlermeldung:
Error 1 'string' does not contain a definition for 'ToInt32' and no extension method 'ToInt32' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?) C:\Users\Pluto\AppData\Local\Temporary Projects\ConsoleApplication5\Program.cs 18 36 ConsoleApplication5
In diversen Foren wird stattdessen "convert" dafür empfohlen. Ich versteh jedoch für diese Anwendung nicht wie ich das einsetzen soll. Bitte helft mir.
Gruß Pluto
Hier die Source:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| using System;
namespace outRefParameter { class out_Parameter { public static void IsBigger(int a, int b,out bool isOK) { isOK = (a>b); } public static void Main() { bool isOK; int a; int b;
a = Console.ReadLine().ToInt32(); b = Console.ReadLine().ToInt32();
IsBigger(a, b, out isOK);
Console.WriteLine("Ergebniss a>b: {0}", isOK); } } } |
Moderiert von
Christian S.: C#-Tags hinzugefügt
JüTho - Di 08.09.09 17:20
Hallo und :welcome:
Die Fehlermeldung ist doch klar: Ein String kennt unter NET keine ToInt32-Methode. (Ich glaube, das gab es noch nie.) Wenn du in die
SDK-Doku/MSDN schaust, dann stellst du fest:
ToInt32-Methode => das gibt es bei
Convert.ToInt32
String-Klasse => es gibt keine Methode, die aus einem String einen int macht
Es gibt mehrere Wege, um aus einem String, der einem Zahlwert entspricht, diese Zahl zu machen. Der einfache, aber schlechte Weg:
C#-Quelltext
1: 2:
| string s = "was auch immer"; int i = Convert.ToInt32(s); |
Ein etwas besserer Weg ist
Parse:
Der beste Weg ist
TryParse, denn bei Fehleingaben führen beide Lösungen zum Absturz:
C#-Quelltext
1: 2:
| int i = 0; if (int.TryParse(s, out i)) ... |
Diese Verfahren gibt es auch für viele andere Konvertierungen, z.B. String zu double, decimal, DateTime.
Auch dabei lohnt sich ein Blick in
SDK-Doku/MSDN: Es gibt viele Überladungen dieser Methoden, die z.B. die Schreibweise von Zahlen und Dezimal-/Tausender-Trenner festlegen.
Gruß Jürgen
/Edit
Nun gut, Christian hat grundsätzlich recht: Auch IConvertible kennt ToInt32; String hat IConvertible implementiert. Ich kann mir aber nur sehr exotische Situationen vorstellen, wo man in der Praxis so arbeiten wird. Stattdessen werden (wie oben gesagt) viele direkte Methoden angeboten.
Christian S. - Di 08.09.09 17:22
Die Methode gibt es, rankommen tut man so:
C#-Quelltext
1:
| ((IConvertible)s).ToInt32(new CultureInfo("de-DE")) |
Hängt wohl damit zusammen, wie String das Interface IConvertible implementiert. :nixweiss:
pluto_0814 - Mi 09.09.09 16:10
Hallo,
danke für Deine Antwort. Habe jetzt länger versucht eine Deiner Vorschläge umzusetzen, aber wie gesagt ich habe gerade erst mit C# angefangen und bekomms nicht hin. Kannst Du mir bitte anhand meiner Source zeigen wie das gemacht wird.
Ich habe bisher immer am besten gelernt wenn ich es komplett gesehen habe.
Gruss
JüTho - Mi 09.09.09 17:20
Du hast vier Antworten von zwei Helfern bekommen. Was meinst du damit:
pluto_0814 hat folgendes geschrieben : |
danke für Deine Antwort. |
Ich will mal nicht so sein.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| int a; int b; if ( int.TryParse(Console.ReadLine(), out a ) && ( int.TryParse(Console.ReadLine(), out b ) { Console.WriteLine("Ergebniss a>b: {0}", IsBigger(a, b) ); } else { Console.WriteLine("Einer der eingegebenen Texte ist keine Zahl"); } |
Deine Konstruktion für isOK ist eher seltsam: Wenn
ein Wert abgefragt wird, dann gib den doch als Rückgabe an statt mit out-Parameter:
C#-Quelltext
1: 2: 3: 4:
| public static bool IsBigger(int a, int b) { return (a > b); } |
Jürgen
pluto_0814 - Do 10.09.09 14:35
Hallo Jürgen,
Ist nicht meine, der Autor des Buchs hat in diesem Beispiel den out-Parameter demonstriert.
JüTho hat folgendes geschrieben : |
Wenn ein Wert abgefragt wird, dann gib den doch als Rückgabe an statt mit out-Parameter:
C#-Quelltext 1: 2: 3: 4:
| public static bool IsBigger(int a, int b) { return (a > b); } | |
Ja das ist der normale Weg, schon klar.
Gruss Stefan
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!