2016-08-21 104 views
-1

我收到以下错误:长度不能小于零

An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll

Additional information: Length cannot be less than zero.

这是产生误差的代码:

​​

的错误出现在度线,并告诉我的StopPtr正在返回-1。

+0

请仔细阅读[问],然后看看这里学习如何创建[mcve]。你刚刚抛弃了一大堆模糊的代码*我无法真正理解这句话。 –

+0

我回去调整了一些问题,并拿出了一些编码。我希望我足够让人们了解该计划在做什么。 –

回答

1

Substring(startIndex, length)函数抱怨说您传递了一个负数作为参数length。这显然是无效的(对吗?)。

这意味着StopPtr - StartPtr必须评估为小于零的值。您知道StartPtr恰好为零,因为您只需将其设置为零。所以StopPtr必须小于零。

因此,这意味着DegreeString.IndexOf("°", StartPtr)返回一个负数。

IndexOf函数在未找到子字符串时返回-1。

所以问题一定是DegreeString不包含字符"°"

+0

我明白你说什么用indexOf返回-1。我尝试更改:StartPtr = 0 StopPtr = Hubs(Index1Integer).Lat.IndexOf(“°”,StartPtr) degrees = Convert.ToDouble(Hubs(Index1Integer).Lat.Substring(StartPtr,StopPtr - StartPtr))进入上面的函数,DegreeString是我的输入参数。我对现在如何超出OutOfRange感到困惑。 –

+0

@MARQUEBURGESS - 这是因为'DegreeString'不包含''°''。这是唯一的原因。 – Enigmativity

+0

为了理解发生了什么,您需要在代码中设置一些断点并逐步完成,观察变量的值在代码执行时如何变化。 – Blorgbeard