c#分割字符串时出现空引用异常

本文关键字:引用 异常 分割 字符串 | 更新日期: 2023-09-27 18:05:54

我试图找出如何解决一个NullReferenceException在我的c#控制台应用程序。

这是一个基本的水平。

实际上,我有一个叫做getWord()的方法。它接受两个参数——字符串和整数。

getWord使用整数,并根据该整数从字符串(基于空格,无逗号或任何其他类型的标点符号)获取单词

它应该是这样工作的:

getWord("john is 17 ", 0)结果为"john"

getWord("john is 17 ", 1)结果为"is"

getWord("john is十七",2)结果为"十七"

在程序中,我声明了一个简单的字符串数组,对其进行初始化,并向其中添加两个元素。

循环遍历数组的每个元素并打印数组中每个元素的第一个单词- getWord(line, 0)。

问题是控制台打印每行的第一个单词,但之后我在这行上得到一个NullReferenceException:

    string[] words = inputString.Split(new char[] { ' ' });

我不知道为什么。我使用的是Visual c# 2008和。net Framework 3.5。我一直得到NullReferenceExceptions在我所有的c#代码,我不知道为什么。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace ConsoleApplication1
    {
        class Program
        {
            public static string[] levelCurList;
            static void Main(string[] args)
            {
                levelCurList = new string[500];
                levelCurList[0] = "52 afdaf";
                levelCurList[1] = "dfsf afdf";
                foreach (string line in levelCurList)
                {
                    Console.WriteLine(getWord(line, 0));
                }
            }
            public static string getWord(string inputString, int word)
            {
                string[] words = inputString.Split(new char[] { ' ' });
                if (words.Length >= word)
                    return words[word];  
                else
                    return "";
            }
        }
    }

c#分割字符串时出现空引用异常

将新的string[500]更改为new string[2],您的数组中有500元素,您只初始化其中两个,其余的为null

您正在传递null字符串到getWord方法,这就是为什么您得到异常。你也可以使用:

foreach (string line in levelCurList.Take(2))

或:

foreach (string line in levelCurList.Where(x => x != null))

注意:还应该将if (words.Length >= word)更改为if (words.Length > word)(删除=),否则当word参数等于words.Length时,您将获得IndexOutOfRange异常。由于数组索引为零,因此字符串的最后一个元素是words[words.Length - 1];而不是words[words.Length];