2015-06-11 6 views
5

Das ist sehr verwirrend für mich. Irgendwie gibt die IndexOf(string) Methode meines List<string> Objekts -1 zurück, obwohl der Wert in der Liste CLEARLY ist.Liste <string> Objekt IndexOf zurückgeben -1. Wie?

protected readonly List<string> validPrefixes = new List<string>() { "01", "02", "03", "FE", "E1", "E2", "E3" }; 

string prefix ist "01"

enter image description here

validPrefixes Index 0 ist "01".

enter image description here

indexOf -1. Ähm ... Wie?

enter image description here

+8

Aus Neugier, was passiert, wenn Sie 'validPrefixes.IndexOf (" 01 ")'? – Amit

+0

Bitte zeigen Sie den Inhalt der Variablen 'addr' an. –

+7

Nicht mit etwas wie einer Null gegen einen Buchstaben "O" sind wir? –

Antwort

1

Nun, ich bin nicht sicher, warum, aber es sieht aus wie mein Debugger mir lag. Ich glaube, was geschah, war die Werte in validPrefixes benötigt, um alle Kleinbuchstaben sein, da ich die ToLower() Methode zuvor in meinem Code, der die Variable bewirkt.

Aus irgendeinem Grund schien mein Debugger irgendwie Iterationen einer Schleife zu mischen. Ich konnte nur sagen, dass dies geschah, indem Sie Variablen char[] mit der Methode string.ToCharArray() zuweisen.

("01").ToCharArray() wurde ['0','1'] zurückgegeben. prefix.ToCharArra() wurde ['f','e'] zurückgegeben.

Irgendwie der Debugger erzählte mir den Wert von prefix wurde "01" während der Wert von prefix.ToCharArray()['f','e'] war. Letzteres ist, was der Wert von einer anderen Schleifeniteration hätte sein sollen.

Da ich nach "FE" statt "fe" suchte, funktionierte mein Code nicht, aber mein Debugger sagte mir das nicht genau.

Ich entwickle für iOS mit Xamarin auf meinem Windows PC mit dem Xamarin iOS Build Host. Ich habe in der Vergangenheit seltsame Dinge mit mir erlebt, indem ich mich so entwickelt habe, besonders wenn es um Debugging und Breakpoints geht. Also werde ich dem Xamarin Build Host die Schuld geben.

Dank @Amit und @DavidW für die Hilfe zu dieser Schlussfolgerung.

+0

haben Sie Release- oder Debug-Assemblys debuggt? – Kai

+0

Das nächste Mal tun 'validPrefixes.IndexOf (Präfix, StringComparison.OrdinalIgnoreCase) ', das macht IndexOf auch nicht case sensitive und es zwingt Sie nicht, eine zusätzliche Zeichenkette mit' ToUpper' oder 'ToLower' zu generieren. –

+0

@Kai Ich debuggte mit Debug-Baugruppen. –