Autor Beitrag
pluto_0814
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 08.09.09 15:36 
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:

ausblenden 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); //Erste Zuweisung=Initialisierung
        } 
           
        public static void Main()
        {
            bool isOK; //nicht initialisiert
            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 user profile iconChristian S.: C#-Tags hinzugefügt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
string s = "was auch immer";
int i = Convert.ToInt32(s);

Ein etwas besserer Weg ist Parse:
ausblenden C#-Quelltext
1:
int i = int.Parse(s);					

Der beste Weg ist TryParse, denn bei Fehleingaben führen beide Lösungen zum Absturz:
ausblenden 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.


Zuletzt bearbeitet von JüTho am Di 08.09.09 17:26, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 08.09.09 17:22 
Die Methode gibt es, rankommen tut man so:
ausblenden C#-Quelltext
1:
((IConvertible)s).ToInt32(new CultureInfo("de-DE"))					

Hängt wohl damit zusammen, wie String das Interface IConvertible implementiert. :nixweiss:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
pluto_0814 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 09.09.09 17:20 
Du hast vier Antworten von zwei Helfern bekommen. Was meinst du damit:
user profile iconpluto_0814 hat folgendes geschrieben Zum zitierten Posting springen:
danke für Deine Antwort.

Ich will mal nicht so sein.
ausblenden 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
        public static bool IsBigger(int a, int b)
        {
            return (a > b); 
        }


Jürgen
pluto_0814 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 10.09.09 14:35 
Hallo Jürgen,

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Du hast vier Antworten von zwei Helfern bekommen. Was meinst du damit:
user profile iconpluto_0814 hat folgendes geschrieben Zum zitierten Posting springen:
danke für Deine Antwort.


Also wie Du schon schreibts, vier Antworten, zwei Helfer, drei Antworten von Dir, ich schrieb:
"versucht eine Deiner Vorschläge umzusetzen" mir war damit klar das nur Du gemeint sein kannst. :-)

user profile iconJüTho hat folgendes geschrieben:
577454)Ich will mal nicht so sein.
ausblenden 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");
}


ok damit kann ich was anfangen, danke.

[quote="user profile iconJüTho"(577454)]Deine Konstruktion für isOK ist eher seltsam:


Ist nicht meine, der Autor des Buchs hat in diesem Beispiel den out-Parameter demonstriert.

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ein Wert abgefragt wird, dann gib den doch als Rückgabe an statt mit out-Parameter:
ausblenden 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