我试图弄清楚如何在我的C#控制台应用程序中解决NullReferenceException。
它处于基础水平。
基本上,我有一个名为getWord()的方法。它需要两个参数 - 一个字符串和一个整数。
getWord使用整数并根据字符串中的整数获取单词(基于空格,无逗号或任何其他类型的标点符号)
它应该如何运作:
getWord(" john是17岁",0)导致" john"
getWord(" john是17岁",1)结果"是"
getWord(" john是17岁",2)导致" 17岁"
在程序中,我声明一个简单的字符串数组,初始化它,并向其添加两个元素。
我循环遍历数组的每个元素,并从数组的每个元素打印第一个单词 - getWord(line,0)。
问题是控制台打印每行的第一个单词但在此之后我在这一行得到NullReferenceException:
string[] words = inputString.Split(new char[] { ' ' });
我不知道为什么。如果重要的话,我使用的是Visual C#2008和.NET Framework 3.5。 我一直在我的所有C#代码中获得NullReferenceExceptions,我不知道为什么。
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 "";
}
}
}
答案 0 :(得分:3)
将新string[500]
更改为new string[2]
,您的数组中有500
个元素,只初始化其中两个元素,其余部分为 null 。< / p>
您正在将 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)
(删除=
),否则当IndexOutOfRange
参数等于word
时,您将获得words.Length
例外words[words.Length - 1];
。由于数组索引为零,因此字符串的最后一个元素是words[words.Length];
而不是{{1}}