尝试向数组添加值时获取NullReferenceException

时间:2015-02-01 01:42:39

标签: c# variables windows-runtime windows-phone-8.1 nullreferenceexception

我对此代码有疑问。 每次运行时,它都会返回' System.NullReferenceException'。

// Clear out the Array of code words
wordBuffer = null;
Int32 syntaxCount = 0;

// Create the regular expression object to match against the string
Regex defaultRegex = new Regex(@"\w+|[^A-Za-z0-9_ \f\t\v]",
RegexOptions.IgnoreCase | RegexOptions.Singleline);
Match wordMatch;

// Loop through the string and continue to record
// words and symbols and their corresponding positions and lengths
for (wordMatch = defaultRegex.Match(s); wordMatch.Success; wordMatch = wordMatch.NextMatch())
{
    var word = new Object[3] { wordMatch.Value, wordMatch.Index, wordMatch.Length };
    wordBuffer[syntaxCount] = word;
    Debug.WriteLine("Found = " + word[0]);
    syntaxCount++;
}

// return the number of symbols and words
return syntaxCount;

这些行发生异常:

Debug.WriteLine("Found = " + word[0]);
                syntaxCount++;

特别是在尝试获取word[0]值时,以及在syntaxCount的第二行上,但这些值都不为空,如下图所示:

变量" s"只是RichEditBox的一行,word [0]有一个值,为什么它返回NullReferenceException? syntaxCount也有一个值:/

1 个答案:

答案 0 :(得分:2)

您在wordBuffer[syntaxCount] = word;

行上收到例外

您使用错误的方法存储结果。数组不是自动创建的,也不会自动增长。即,您需要使用string[] arr = new string[size]预先定义其大小。请改用列表,因为此处您不知道大小。列表会自动增长:

// Initialize with
var wordBuffer = new List<string>();

// ...
// And then add a word to the list with
wordBuffer.Add(word);

您使用wordBuffer.Count查询条目数,并且一旦添加了项目,您就可以像访问数组一样访问这些项目:wordBuffer[i],其中索引从0转到{ {1}}。这使变量wordBuffer.Count - 1变得多余。

当然,您可以使用syntaxCount循环显示列表。