有人选择将此标记为重复,虽然我很乐意尝试清理一个问社区的问题,但我在发布问题之前已详细检查了“重复”材料。如下面的问题所示,我展示了问题的输出,它没有空值。
我有一个基于用户选择一个如下所示的微调器值创建的方法:
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));
请指教!
答案 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));