我对此代码有疑问。 每次运行时,它都会返回' 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也有一个值:/
答案 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
循环显示列表。