有人选择将其标记为重复,尽管我可以尝试清理提问社区,但我在发布问题之前已详细检查了“重复” Material 。正如下面我的问题所示,我显示了相关问题的输出,其中没有空值。
我有一个基于用户选择的微调器值创建的方法,如下所示:
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 只是用户使用微调器所做的选择。
我有一个字符串数组 Terrainstr,它在 OnCreate 之前初始化,如下所示:
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。在这种情况下,它根本不适合。我使用此处显示的命令得到一个空异常:
var index = Array.FindIndex(Terrainstr, x => x.Contains(ttype));
请多多指教!
最佳答案
基本上,您的数组大小为 10,其中只有 8 个元素(基于 Console.WriteLine
输出),因此最后两个为 null
。
Array.FindIndex
不会检查元素是否为 null 并将其传递给您尝试运行 .Contains
的 lambda。如果它为空,那么您会得到一个NullReferenceException
。
过滤数组并仅对非空元素执行 FindIndex
。
var index = Array.FindIndex(Terrainstr, x => x != null && x.Contains(ttype));
关于c# - 在 C# 中的字符串数组中搜索 Array.FindIndex 时出现 Null 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41348249/