此代码出现意外结果

时间:2011-03-20 19:31:44

标签: c# c#-2.0 c#-to-vb.net

我有一个声明为:

的对象
private string SourceProgram;

基本上我试图使用下面的代码解析一些东西:

 private void LabelScan(System.IO.BinaryWriter OutputFile, bool IsLabelScan)
        {

            if (char.IsLetter(SourceProgram[CurrentNdx]))
            {
               if (IsLabelScan) LabelTable.Add(GetLabelName(), AsLength);
                while (SourceProgram[CurrentNdx] != '\n')
                    CurrentNdx++;
                CurrentNdx++;
                return;
            }
            EatWhiteSpaces();
            ReadMneumonic(OutputFile, IsLabelScan);
        }

但是我在执行时遇到错误:

-       SourceProgram[CurrentNdx]   
'SourceProgram[CurrentNdx]' threw an exception of 
type 'System.IndexOutOfRangeException'  char {System.IndexOutOfRangeException}

-       base    {"Index was outside the bounds of the array."}
    System.SystemException {System.IndexOutOfRangeException}

CurrentNdx的价值是46。

出了什么问题。是SourceProgram的字符串变量length < 46吗?

如果是,请如何修复此代码?

3 个答案:

答案 0 :(得分:0)

代码似乎在字符串SourceProgram中寻找新的行字符。也许SourceProgram不包含\ n?

当然最好使用int position = SourceProgram.indexOf("\n")来找到\ n

的位置

此外,您似乎没有在此代码中将CurrentNdx重置为零,这可能在其他地方需要

答案 1 :(得分:0)

while (SourceProgram[CurrentNdx] != '\n')
                    CurrentNdx++;

也许您的SourceProgram字符串不包含换行符,或者在CurrentNdx超出字符串中的任何换行符后调用该函数。

答案 2 :(得分:0)

是的,此错误表明SourceProgram少于47个字符。虽然没有看到SourceProgram的内容,但我们几乎可以告诉你。