简体   繁体   中英

Getting NullReferenceException when trying to add a value to an array

I'm having issues with this code. Everytime when it runs, it returns me the '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;

The exception occurs on those lines:

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

Specifically when trying to get the word[0] value, and on the second line with the syntaxCount , but none of those values are null, as you can see in the image below:

The variable "s" is just a line of a RichEditBox, word[0] has a value, so why is it returning the NullReferenceException? syntaxCount has a value too :/

You are getting the exception on the line wordBuffer[syntaxCount] = word;

You are using the wrong approach for storing the results. Arrays are not created automatically and they do not grow automatically. Ie, you need to define their size in advance with string[] arr = new string[size] . Use a list instead, as you do not know the size in advance here. Lists grow automatically:

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

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

You query the number of entries with wordBuffer.Count and you can access the items as in an array, once they have been added: wordBuffer[i] , where the index goes from 0 to wordBuffer.Count - 1 . This makes the variable syntaxCount superfluous.

And of course, you can loop through a list with foreach .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM