c# - 在 C# 中的字符串数组中搜索 Array.FindIndex 时出现 Null 异常

标签 c# arrays

有人选择将其标记为重复,尽管我可以尝试清理提问社区,但我在发布问题之前已详细检查了“重复” 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/

相关文章:

c# - 如何从母版页访问页面控件?

java - 我在 for 循环中大写了太多元素,但仅在特定索引上大写

c++ - c++ - 如何限制char数组仅从c++中的字符串中获取a和b?

arrays - 数组中的数组/字典是空快捷方式

c# - C#弹性搜寻-巢状查询/筛选

c# - Entity Framework 无法从存储的 MySql 正确创建复杂类型

c# - 如何在 .NET MVC 中使用 Petapoco ORM 从 SQL 返回自动增量 ID

c# - 退出代码 - 2147220978 (0x8004020e)

arrays - 当Cypher中数组的元素大于零时,我如何计算它们?

c++ - 文件输出中出现错误字符