Ausprobieren ob ID im Array Gültig ist

Gast #5024148
Hallo,

ich bin gerade am lernen von C#...

ich habe mir ein Array erstellt, in welchen Informationen stehen über 
die Konsole kann ich mit einer ID einfach eine Position raussuchen 
anschließend werden mir dann die Informationen angezeigt.

jetzt habe ich ein Array mit 50 Feldern...

wenn ich jetzt -1 oder 50 eingebe kommt natürlich eine Exception...

ich habe es mit try & catch versucht, allerdings fehlt mir da der 
richtige Ansatz...
<- ich möchte nicht das Array zurück geben sondern erstmal nur die ID
1
            bool isID = false;
2
            int inputID = 0;
3

4
            do
5
            {
6
                try
7
                {
8
                    inputID = Convert.ToInt32(Console.ReadLine());
9
                    if( myArray[inputID -1].id >= 0)
10
                        isID = true;
11
                }
12
                catch (FormatException)
13
                {
14
                    Console.WriteLine("dies war keine gültige ID! Bitte erneut eine Zahl zwischen {0} und {1} eingeben.", 1, myArray.Length);
15
                    isID = false;
16
                }
17
            } while (!isID);
18
            return inputID -1;

hat jemand eine gute Idee für mich

Vielen Dank
Gast
1
            bool isID = false;
2
            int inputID = 0;
3

4
            do
5
            {
6
                inputID = Convert.ToInt32(Console.ReadLine());
7
                if ((inputID > 0) && (inputID < myArray.Length){
8
                    if( myArray[inputID -1].id >= 0)
9
                        isID = true;
10
                }
11
                else
12
                {
13
                    Console.WriteLine("dies war keine gültige ID! Bitte erneut eine Zahl zwischen {0} und {1} eingeben.", 1, myArray.Length);
14
                }
15
            } while (!isID);
16
            return inputID-1;
Gast
baer schrieb:

> ich habe mir ein Array erstellt, in welchen Informationen stehen über
> die Konsole kann ich mit einer ID einfach eine Position raussuchen
> anschließend werden mir dann die Informationen angezeigt.

Nein. Was du meinst, ist keine "ID", sondern schlicht und einfach ein 
Array-Offset.

> jetzt habe ich ein Array mit 50 Feldern...
>
> wenn ich jetzt -1 oder 50 eingebe kommt natürlich eine Exception...

Weil halt der Offset ausserhalb des gültigen Bereichs ist. Das sollte 
nie passieren, wenn man korrekten Code programmiert hat. Du hast Glück, 
dass "managed code" wie der von C# produzierte Arrayzugriffe 
diesbezüglich überwacht und die Exception wirft, anstatt wild in 
irgendwelchem Speicher rumzuschreiben, der überhaupt nicht zum Array 
gehört.

> ich habe es mit try & catch versucht, allerdings fehlt mir da der
> richtige Ansatz...

Mit try & catch kann man das zwar durchaus lösen, ist aber nicht gerade 
optimal. Sowas macht man sinnvollerweise nur, wenn es wirklich keine 
andere Möglichkeit gibt, einen potentiellen Fehler vorbeugend zu 
erkennen. Die gibt es aber hier:

Der Bereich der zulässigen Offsets für ein Array fängt in C# immer beim 
Offset 0 an und hört bei der Länge des Arrays - 1 auf.

Auf die Länge des Arrays kann man über die Eigenschaft "Length" 
zugreifen. Wirklich wenig überraschend...
Gast
Rufus Τ. F. schrieb:
> Da fehlt eine Klammer und obendrein sollte der zweite Vergleich statt <
> <= verwenden, sonst wird das letzte Arrayelement unterschlagen.

ADHS... ;)

c-hater schrieb:
> Der Bereich der zulässigen Offsets für ein Array fängt in C# immer beim
> Offset 0 an und hört bei der Länge des Arrays - 1 auf.

Es geht aber darum, dass der Bediener etwas eingibt, das ihm geläufig 
ist.
Wenn man etwas für Benutzer, die keinen näheren technischen Bezug haben, 
programmiert, ist es für die einfacher wenn man ab 1 indiziert.
Wie man das intern verarbeitet, ist was anderes, solange es sauber 
funktioniert.
Gast
1
if ((inputID < 0) || (inputID > (myArray.Length-1)))
2
  Console.WriteLine("dies war keine gültige ID!...
try & catch sollte wirklich nur für die unerwarteten/unwahrscheinlichen 
Sachen genutzt werden, da zu Aufwändig.
Gast
Lutz schrieb:
1
 if ((inputID < 0) || (inputID > (myArray.Length-1)))
2
  Console.WriteLine("dies war keine gültige ID!...

das müsste dann aber
1
 if ((inputID < 1) || (inputID > (myArray.Length-1)))

heissen...
Gast
>inputID = Convert.ToInt32(Console.ReadLine());
...man kann statt Convert.ToInt32() auch Int32.TryParse() nutzen, wenn 
man davon ausgehen kann, dass da schonmal kein Int32 eingegeben wird.
Ich persönlich setze bei sowas auch immer noch zusätzlich String.Trim() 
ein: Wenn mal die Zwischenablage involviert ist, passiert es recht 
schnell, dass der Benutzer mal irgendwelche Leerzeichen oder ähnliches 
mit kopiert hat.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.