数组包含元素,但IndexOf返回-1

时间:2017-03-05 10:51:33

标签: c# arrays

我有一个字符串数组lines,其中一个项可能包含值MisterMisses

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

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

返回true。现在,我想使用

分别找到Mister的索引Misses
var index = lines.IndexOf("Mister");

(为了简单起见,我没有将Misses的代码放在这里)

但是,索引总是-1(尽管数组中存在项目)。所以我认为必须有不同的尝试(我甚至添加了ToLower(),但这不是原因,因为lines.Contains()否则会返回false):

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

但仍然...... index = -1。这真让我抓狂!我们肯定包含该项目的数组,但我找不到索引。

3 个答案:

答案 0 :(得分:3)

以下是true

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

因为您的字符串文字包含单词Misses。话虽如此,当您IndexOf上的lines作为参数传递Mister时,您获得-1,因为Mister未包含在lines中1}}。

答案 1 :(得分:1)

假设你的文字中包含" Mister"在某处;以下代码应该有效:

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);

答案 2 :(得分:0)

这段代码对我有用。 Pos的值为5. containsOne为true且containsTwo为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");

有关FindIndex方法的更多信息,请查看this page on MSDN