如何在 C# 中调试 System.ArgumentOutOfRangeException 错误?
How to debug a System.ArgumentOutOfRangeException error in C#?
这段代码应该取两个样本,一个是原始的,一个是新的,然后确定插入到第一个序列中的最小单个连续片段的长度。
尝试一些示例时,我收到以下错误消息:
System.ArgumentOutOfRangeException: 'Index and length must refer to a
place within the string. Parameter name: length
代码如下:
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);
}
}
}
问题是:
sample1 = sample1.Substring(i, sample1.Length);
和其他类似的方法调用。 Substring
的第二个参数是长度(即要为子字符串检索的字符数)。因此,如果 i
大于 0,在这种情况下应该会失败,因为该方法将尝试检索不在字符串中的字符。
您的一个循环正在尝试访问不存在的元素。例如,您有一个数组 a ={1,2,3},您正试图访问不存在的第四个元素。
如果您无法找出确切位置,则可能存在问题,请尝试在循环中使用 print 语句,显示计数器 (i) 值。它将指出您的代码在哪个迭代中失败了。
这段代码应该取两个样本,一个是原始的,一个是新的,然后确定插入到第一个序列中的最小单个连续片段的长度。
尝试一些示例时,我收到以下错误消息:
System.ArgumentOutOfRangeException: 'Index and length must refer to a place within the string. Parameter name: length
代码如下:
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);
}
}
}
问题是:
sample1 = sample1.Substring(i, sample1.Length);
和其他类似的方法调用。 Substring
的第二个参数是长度(即要为子字符串检索的字符数)。因此,如果 i
大于 0,在这种情况下应该会失败,因为该方法将尝试检索不在字符串中的字符。
您的一个循环正在尝试访问不存在的元素。例如,您有一个数组 a ={1,2,3},您正试图访问不存在的第四个元素。
如果您无法找出确切位置,则可能存在问题,请尝试在循环中使用 print 语句,显示计数器 (i) 值。它将指出您的代码在哪个迭代中失败了。