尝试向数组添加值时出现 NullReferenceException

Getting NullReferenceException when trying to add a value to an array

我在使用这段代码时遇到问题。 每次运行时,它 returns 我 '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,但是这些值的 none 为空,如图所示以下:

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

您在 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],索引来自 0wordBuffer.Count - 1。这使得变量 syntaxCount 变得多余。

当然,您可以使用 foreach.

遍历列表