Entwickler-Ecke

C# - Die Sprache - Merkwürdiges Verhalten bei strings


dennismijo - Mi 14.01.09 18:12
Titel: Merkwürdiges Verhalten bei strings
Hallo.

Ich sitze gerade bei einer Aufgabe und komme komischerweise an einer eigenlich simplen stelle, wegen einer merkwürdigen ausgabe nicht weiter.

Also ich habe folgende Klasse:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
class Coin
    {
        string ary = "";

        public void setA(string s)
        {
            ary = s;
        }

        public void genDec()
        {
            int erg = ary[ary.lenght-1];

            Console.Writeline(erg);
            
        }
    }


Das Hauptprogramm gibt an setA einen string der zB diesem entspricht "0101011010".

Wenn ich nun einfach den Wert von erg ausgebe (der ja eigentlich 0 oder 1 sein müsste) kommt bei mir immer die zahl 48 heraus.

Wenn ich jedoch die Ausgabe so starte:


C#-Quelltext
1:
Console.WriteLine(arty[ary.lenght - 1),                    


kommt mein gewünschtes Ergebnis.

Ich habe schon sehr komplexere Programme in C# geschrieben, doch hier, kann ich es mir nicht erklären und verzweifle ;)

Jemand eine Idee? ;)


Christian S. - Mi 14.01.09 18:16

Zuerst einmal finde ich es erstaunlich, dass Dein String die Eigenschaft "lenght" kennt :D

Zum anderen musst Du mal überlegen, was Du in dieser Zeile machst:

C#-Quelltext
1:
int erg = ary[ary.lenght-1];                    

Du hast links einen int, rechts hast Du einen char. Da wird ein impliziter Cast ausgeführt, was wohl den Ordinalwert des Chars ergeben dürfte.


dennismijo - Mi 14.01.09 18:21

Ok, darüber habe ich schon nachgedacht.

Wie ist es mir dann möglich ein Element aus dem String zu entnehmen?

leider funktioniert sowas wie Convert.ToIn32 auch nicht :/


Christian S. - Mi 14.01.09 18:23

Du musst den Char halt vorher in einen String konvertieren, aber das sollte ja keine große Hürde sein :-)

IMHO ist Int32.Parse(...) logischer (im Sinne von OOP) als Convert.ToInt32.


Greenberet - Mi 14.01.09 18:55

bzw. nachdem es sich hier nur um 1 ziffer handelt kannst du auch

int erg = ary[ary.length-1]-'0'; machen =)