2015-06-11 9 views
5

Questo è molto sconcertante per me. In qualche modo il metodo IndexOf(string) del mio oggetto List<string> restituisce -1 anche se il valore è CHIARAMENTE nell'elenco.Elenco <string> oggetto IndexOf restituisce -1. Come?

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

string prefix è "01"

enter image description here

validPrefixes indice 0 è "01".

enter image description here

indexOf è -1. Umm ... Come?

enter image description here

+8

Per curiosità, cosa succede se si 'validPrefixes.IndexOf (" 01 ")'? – Amit

+0

Si prega di mostrare il contenuto della variabile 'addr'. –

+7

Non si tratta di qualcosa come zero contro una lettera 'O' siamo? –

risposta

1

Beh io non so perché, ma sembra che il mio debugger stava mentendo a me. Credo che quello che stava accadendo era che i valori in validPrefixes dovevano essere tutti in minuscolo poiché stavo usando il metodo ToLower() precedentemente nel mio codice che ha effettuato la variabile string addr.

Per qualche motivo il mio debugger sembrava in qualche modo essere unendo le iterazioni di un ciclo. Sono stato solo in grado di dire che questo stava accadendo assegnando variabili a char[] usando il metodo string.ToCharArray().

("01").ToCharArray() restituiva ['0','1']. prefix.ToCharArra() restituiva ['f','e'].

In qualche modo, il debugger mi stava dicendo il valore di prefix stata "01" mentre il valore di prefix.ToCharArray() era ['f','e']. Quest'ultimo è ciò che il valore avrebbe dovuto essere da una diversa iterazione del ciclo.

Poiché stavo controllando per "FE" anziché "fe", il mio codice non funzionava, ma il mio debugger non mi stava dicendo esattamente questo.

Sto sviluppando per iOS utilizzando Xamarin sul mio PC Windows utilizzando Xamarin iOS Build Host. Ho avuto cose strane che mi sono capitate in passato sviluppando in questo modo specialmente quando si tratta di debug e breakpoint. Quindi darò la colpa al Xamarin Build Host.

Grazie a @Amit e @DavidW per avermi aiutato a giungere a questa conclusione.

+0

hai eseguito il debug degli assembly di rilascio o di debug? – Kai

+0

La prossima volta fare 'validPrefixes.IndexOf (prefix, StringComparison.OrdinalIgnoreCase)', che renderà IndexOf non sensibile al maiuscolo/minuscolo e non costringe a generare una stringa in più con 'ToUpper' o' ToLower'. –

+0

@Kai I ha eseguito il debug utilizzando gli assembly di debug. –