2017-03-05 5 views
0

zurück Ich habe ein String-Array lines von denen ein Element den Wert Mister oder Misses enthalten kann.Array enthält Element, aber IndexOf gibt -1

var lines = "3.3. 3 - 3 88C Mister Molitor D For Ne Les Text".Split(' '); 

Console.WriteLine(lines.Contains("Mister") || lines.Contains("Misses")); 

kehrt true. Jetzt habe ich den Index Mister finden wollen, bzw. Misses, mit

var index = lines.IndexOf("Mister"); 

(ich habe nicht den Code setzen für Misses hier aus Gründen der Einfachheit)

jedoch Index immer ist -1 (trotz der Existenz des Elements im Array). Also dachte ich, es muss etwas anderes zu versuchen (Ich habe sogar ToLower(), was aber nicht der Grund sein kann als lines.Contains() otherwise'd return false):

var index = lines.FindIndex(x => x.ToLower() == "mister"); 

Aber trotzdem ...index = -1. Das macht mich verrückt! Wir definitiv haben das Array mit dem Artikel, aber ich kann den Index nicht finden.

+1

"3.3. 3 - 3 88C Misses Molitor D Für Ne Les Text" diese Zeichenfolge das Wort 'Misses' enthält, aber es enthält keine das Wort "Herr". –

+1

Bitte beachten Sie, 'IndexOf' ist nur eine Methode von' string', aber hier im Code verwenden Sie string array. Was Sie suchen können, ist 'FindIndex' des Arrays. Benutze deinen Code und benutze 'misses' anstelle von 'mister' in 'var index = lines.FindIndex (x => x.ToLower() ==" mister ");' arbeitete für mich –

+0

@DanielHollinrake Bitte lies es genau: ' (Ich habe den Code für Misses hier nicht aus Gründen der Einfachheit geschrieben). 'Misses' wird genauso behandelt wie' Mister'. Ich weiß, dass das ziemlich unordentlich ist, aber ich habe die ursprüngliche Saite bearbeitet, so dass es sofort klar ist. –

Antwort

3

Nachstehend ist true

lines.Contains("Mister") || lines.Contains("Misses") 

weil Ihr Stringliteral das Wort enthält Misses. Das heißt, wenn Sie die IndexOf über die lines als Parameter übergeben die Mister rufen Sie -1, weil Mister nicht in lines enthalten ist.

+1

Nun, er schrieb "(Ich habe den Code für" Misses "hier aus Gründen der Einfachheit nicht gesetzt)" so würde ich annehmen, dass es eine ähnliche Linie dafür gibt. Aber noch, da das Problem in dem Code, der bisher veröffentlicht wurde, nicht gesehen werden kann, ist es eine schlechte Idee, einen scheinbar trivialen Fall nicht für uns zu inspizieren. –

+0

Ich muss anerkennen, dass das angegebene Beispiel in der Zeichenfolge keine sehr gute Idee ist, wenn ich nur "Mister" hier im Code im Posting behandelte, während die Zeichenfolge "Misses" enthält. Wie auch immer, @ CrushaK.Rool hat Recht! Ich habe die Zeichenfolge für dieses Beispiel bearbeitet. –

+0

@ Çan Es tut mir leid, aber ich verstehe dich nicht. Was meinen Sie? Von dir geposteten Code kann ich nicht sehen, wie wir etwas anderes als "-1" bekommen könnten. Fehle ich etwas? Vielen Dank – Christos

1

Angenommen, Sie haben irgendwo Text mit dem Wort "Mister" drin; der folgende Code sollte funktionieren:

string[] lines = "3.3. 3 - 3 88C Misses Molitor D For Ne Les Text".Split(' ');  
Console.WriteLine(lines.Contains("Mister") || lines.Contains("Misses")); 
var idx = Array.FindIndex(lines, l => l == "Misses"); 

Console.WriteLine(idx); 
0

Dieser Code funktionierte für mich. Pos hat den Wert 5. containsOne ist wahr und containsTwo ist false.

var lines = "3.3. 3 - 3 88C Mister Molitor D For Ne Les Text".Split(' '); 
var pos = Array.FindIndex(lines, c => c.Equals("Mister")); 

var containsOne = lines.Contains("Mister") || lines.Contains("Misses"); 
var containsTwo = lines.Contains("Mister") && lines.Contains("Misses"); 

Weitere Informationen über die Find Methode haben einen Blick auf this page on MSDN

Verwandte Themen