堆栈溢出错误 - C#
Stack Overflow Error - C#
我不断收到堆栈溢出错误,但我不知道为什么或如何修复它。这是我的代码:
private void ShowDiff(int leftIndex, int rightIndex)
{
if (leftIndex > 0 && rightIndex > 0 &&
_compareFunc(_left[_preSkip + leftIndex - 1], _right[_preSkip + rightIndex - 1]))
{
ShowDiff(leftIndex - 1, rightIndex - 1);
FireLineUpdate(DiffType.None, _preSkip + leftIndex - 1, -1);
}
else
{
if (rightIndex > 0 &&
(leftIndex == 0 ||
_matrix[leftIndex, rightIndex - 1] >= _matrix[leftIndex - 1, rightIndex]))
{
ShowDiff(leftIndex, rightIndex - 1);
FireLineUpdate(DiffType.Inserted, -1, _preSkip + rightIndex - 1);
}
else if (leftIndex > 0 &&
(rightIndex == 0 ||
_matrix[leftIndex, rightIndex - 1] < _matrix[leftIndex - 1, rightIndex]))
{
ShowDiff(leftIndex - 1, rightIndex);
FireLineUpdate(DiffType.Deleted, _preSkip + leftIndex - 1, -1);
}
}
}
这是我不断收到的错误:
'System.WhosebugException' 类型的未处理异常发生在 Comparer.exe
感谢任何帮助。
编辑:添加了中断,以防没有条件为真。
相反,使用循环重写函数。此外,您可以稍微简化您的逻辑。
注意:leftIndex
和 rightIndex
都大于 0
的假设仍然存在。
private void ShowDiff(int leftIndex, int rightIndex)
{
while(leftIndex > 0 && rightIndex > 0)
{
if (leftIndex > 0 && rightIndex > 0 &&
_compareFunc(
_left[_preSkip + leftIndex - 1],
_right[_preSkip + rightIndex - 1]))
{
leftIndex--;
rightIndex--;
FireLineUpdate(
DiffType.None,
_preSkip + leftIndex - 1,
-1);
}
else
{
if (rightIndex > 0 &&
(_matrix[leftIndex, rightIndex - 1] >=
_matrix[leftIndex - 1, rightIndex]))
{
rightIndex--;
FireLineUpdate(
DiffType.Inserted,
-1,
_preSkip + rightIndex - 1);
}
else if (_matrix[leftIndex, rightIndex - 1] <
_matrix[leftIndex - 1, rightIndex]))
{
leftIndex--;
FireLineUpdate(
DiffType.Deleted,
_preSkip + leftIndex - 1,
-1);
}
else
{
break;
}
}
}
}
我不断收到堆栈溢出错误,但我不知道为什么或如何修复它。这是我的代码:
private void ShowDiff(int leftIndex, int rightIndex)
{
if (leftIndex > 0 && rightIndex > 0 &&
_compareFunc(_left[_preSkip + leftIndex - 1], _right[_preSkip + rightIndex - 1]))
{
ShowDiff(leftIndex - 1, rightIndex - 1);
FireLineUpdate(DiffType.None, _preSkip + leftIndex - 1, -1);
}
else
{
if (rightIndex > 0 &&
(leftIndex == 0 ||
_matrix[leftIndex, rightIndex - 1] >= _matrix[leftIndex - 1, rightIndex]))
{
ShowDiff(leftIndex, rightIndex - 1);
FireLineUpdate(DiffType.Inserted, -1, _preSkip + rightIndex - 1);
}
else if (leftIndex > 0 &&
(rightIndex == 0 ||
_matrix[leftIndex, rightIndex - 1] < _matrix[leftIndex - 1, rightIndex]))
{
ShowDiff(leftIndex - 1, rightIndex);
FireLineUpdate(DiffType.Deleted, _preSkip + leftIndex - 1, -1);
}
}
}
这是我不断收到的错误:
'System.WhosebugException' 类型的未处理异常发生在 Comparer.exe
感谢任何帮助。
编辑:添加了中断,以防没有条件为真。
相反,使用循环重写函数。此外,您可以稍微简化您的逻辑。
注意:leftIndex
和 rightIndex
都大于 0
的假设仍然存在。
private void ShowDiff(int leftIndex, int rightIndex)
{
while(leftIndex > 0 && rightIndex > 0)
{
if (leftIndex > 0 && rightIndex > 0 &&
_compareFunc(
_left[_preSkip + leftIndex - 1],
_right[_preSkip + rightIndex - 1]))
{
leftIndex--;
rightIndex--;
FireLineUpdate(
DiffType.None,
_preSkip + leftIndex - 1,
-1);
}
else
{
if (rightIndex > 0 &&
(_matrix[leftIndex, rightIndex - 1] >=
_matrix[leftIndex - 1, rightIndex]))
{
rightIndex--;
FireLineUpdate(
DiffType.Inserted,
-1,
_preSkip + rightIndex - 1);
}
else if (_matrix[leftIndex, rightIndex - 1] <
_matrix[leftIndex - 1, rightIndex]))
{
leftIndex--;
FireLineUpdate(
DiffType.Deleted,
_preSkip + leftIndex - 1,
-1);
}
else
{
break;
}
}
}
}