在C#中的字符串数组中搜索Array.FindIndex的Null异常

时间:2016-12-27 15:56:14

标签: c# arrays

有人选择将此标记为重复,虽然我很乐意尝试清理一个问社区的问题,但我在发布问题之前已详细检查了“重复”材料。如下面的问题所示,我展示了问题的输出,它没有空值。

我有一个基于用户选择一个如下所示的微调器值创建的方法:

    public void terrain_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
    {
        Spinner spinner = (Spinner)sender;
        var ttype = string.Format("{0}", spinner.GetItemAtPosition(e.Position));
        Console.WriteLine(ttype);
        foreach (var item in Terrainstr) { Console.WriteLine(item); }
        var index = Array.FindIndex(Terrainstr, x => x.Contains(ttype));

正如您所看到的,字符串ttype只是用户使用微调器进行的选择。

我有一个在OnCreate之前初始化的字符串数组Terrainstr:

string[] Terrainstr = new string[10];

我稍后会根据许多用户选择使用字符串片段填充它。

你会注意到我在方法中有Console.WriteLine命令。使用该方法时,我的(带注释的)输出是:

Fast (ttype)
Stock (Terrainstr[0])
Slow 
Slow Sand 
Slow Sand Rocks Whoops 
Slow Sand Mud Rocks Whoops 
Slow Mud Rocks Whoops 
Slow Mud Rocks (Terrainstr[6])

我想找到Terrainstr的哪些部分包含ttype。在这种情况下,它根本不适合它。我使用此处显示的命令得到一个null异常:

var index = Array.FindIndex(Terrainstr, x => x.Contains(ttype));

请指教!

1 个答案:

答案 0 :(得分:3)

基本上你的数组大小为10,你只有8个元素(基于Console.WriteLine输出),所以最后两个是null s。

Array.FindIndex不检查该元素是否为null,并将其传递给您尝试运行.Contains的lambda。如果它为null,则会得到NullReferenceExeception

过滤数组,只对非空元素执行FindIndex

var index = Array.FindIndex(Terrainstr, x => x != null && x.Contains(ttype));