【问题标题】:How to debug a System.ArgumentOutOfRangeException error in C#?如何在 C# 中调试 System.ArgumentOutOfRangeException 错误?
【发布时间】:2018-05-07 18:38:33
【问题描述】:

这段代码应该取两个样本一个原始的和一个新的,然后确定插入到第一个序列中的最小单个连续片段的长度。

在尝试一些示例时,我收到以下错误消息:

System.ArgumentOutOfRangeException: '索引和长度必须引用一个 放在字符串中。参数名称:长度

代码如下:

class Program
{

    static void Main(string[] args)
    {
        Console.WriteLine(GetSample());
        Console.ReadKey();
    }

    public static int GetSample()
    {
        string sample1 = Console.ReadLine();
        string sample2 = Console.ReadLine();


        if (sample1 == sample2) return 0;

        if (sample1.Length >= sample2.Length)
        {
            for (int i = 0; i < sample2.Length; i++)
            {
                if (!(sample1[i] == sample2[i]))
                {

                    sample1 = sample1.Substring(i, sample1.Length);
                    sample2 = sample2.Substring(i, sample2.Length);
                    break;
                }
            }

            int var = sample1.Length - sample2.Length;
            for (int i = sample2.Length - 1; i >= 0; i--)
            {
                if (sample2[i] == sample1[i + var])
                    sample2 = trimlast(sample2);
            }
        }
        else
        {
            for (int i = 0; i < sample1.Length; i++)
            {
                if (!(sample1[i] == sample2[i]))
                {
                    sample1 = sample1.Substring(i, sample1.Length);
                    sample2 = sample2.Substring(i, sample2.Length);
                    break;

                }
            }
            int var = sample2.Length - sample1.Length;
            for (int i = sample1.Length - 1; i >= 0; i--)
            {
                if (sample2[i + var] == sample1[i])
                    sample2 = trimlast(sample2);
            }
        }
        return sample2.Length;

    }
    public static string trimlast(string str)
    {
        return str.Substring(0, str.Length - 1);
    }
}

}

【问题讨论】:

  • 错误信息看不懂怎么办?这听起来不言自明。
  • 当然是梅森,我想我一定遗漏了一些很明显的东西:(
  • 你还没有回答我的问题。您不理解错误消息的哪一部分?
  • 是的,它确实指出了它失败的地方,这是我从朋友那里得到的代码,我只是想弄清楚如何开始工作。我想我可以在这里问一些指示!有些人给了我指点,所以我会调查一下!

标签: c# error-handling outofrangeexception


【解决方案1】:

问题是:

sample1 = sample1.Substring(i, sample1.Length);

和其他类似的方法调用。 Substring 的第二个参数是长度(即要为子字符串检索的字符数)。因此,如果i 大于 0,在这种情况下它应该会失败,因为该方法将尝试检索不在字符串中的字符。

【讨论】:

  • 好的!我会调查这个谢谢。抱歉,如果这是一个试图帮助朋友同时学习的愚蠢问题:)
  • @SeanleArch 这根本不是一个愚蠢的问题 - 各种语言对此极为不一致。事实上,在 Java 中,第二个参数 唯一的结束索引,因此您问题中的代码将完全按照 Java 编写。
【解决方案2】:

您的一个循环试图访问一个不存在的元素。例如,您有一个数组 a ={1,2,3},您正在尝试访问不存在的第四个元素。

如果您无法找到确切的位置,则可能存在问题,请尝试在循环中使用 print 语句,显示计数器 (i) 值。它会指出您的代码在哪个迭代中失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多