C# C语言中的异常处理变通方法

C# C语言中的异常处理变通方法,c#,exception,exception-handling,C#,Exception,Exception Handling,我试图解析一些字符串。因为我是C语言的新手,所以我很好奇,你可以在下面看到 当Lines\u数组[i]为emptyLines\u数组[i].Length==0时,将引发异常。这已经是我在示例2中想要的,在示例1中是无用的 我想摆脱例外。因为零长度的字符串将是我的极限。是否有任何解决方案、替代方案或解决方法 例1: try { if (Lines_Array[i + 6].Substring(p, 7).Trim() == "") break; } catch (Argum

我试图解析一些字符串。因为我是C语言的新手,所以我很好奇,你可以在下面看到

当Lines\u数组[i]为emptyLines\u数组[i].Length==0时,将引发异常。这已经是我在示例2中想要的,在示例1中是无用的

我想摆脱例外。因为零长度的字符串将是我的极限。是否有任何解决方案、替代方案或解决方法

例1:

try
{
    if (Lines_Array[i + 6].Substring(p, 7).Trim() == "")
        break;
}
catch (ArgumentOutOfRangeException) { break; }
例2: 我需要找出每一页有多少行。 我需要数数,直到看到箭头所示的线为止。但它抛出了一个例外。 截图:

try
{
    while (Lines_Array[i + k].Substring(2, 5).Trim() == "Groze")
    {
        bedensay++;
        k++;
    }
}
catch (ArgumentOutOfRangeException) { }

提前感谢。

如果您不希望框架引发异常,只需在处理之前检查字符串的长度:

var line = Lines_Array[i + 6];
if (string.IsNullOrEmpty(line))
{
    // Handle empty or null string.

}
else
{
   // Handle non-empty string...
}

您不应该使用异常来控制程序流。相反,首先要避免它们。还要注意的是,在一行中执行一条语句,而不连接它们是一种更好的编程风格——这将提高可读性,如果您单步执行代码,则更容易调试

例如:

int index = i + k;
if (index >= Lines_Array.Length)
{
    break;
}
else
{
    var line = Lines_Array[index];
    if (string.IsNullOrEmpty(line))
    {
        // break; or whatever you need to ...
    }
    else
    {
        // if (line.Substring ... ) and so on
    }
}

添加一个检查,查看Lines_数组长度是否为0。按如下方式修改代码:

try
{
    if(Lines_Array.Length != 0)
    {
        while (Lines_Array[i + k].Substring(2, 5).Trim() == "Groze")
        {
            if(Lines_Array.Length <= (i + k))
            {
                bedensay++;
                k++;
            }
        }
    }
}
catch (ArgumentOutOfRangeException) { }

你的问题似乎有点不清楚,你想做什么?正如前面提到的,Q是不清楚的。如果您只是想避免ArgumentOutOfRangeException,只需在获取所需子字符串之前添加一个Lines\u数组长度检查。您熟悉for和/或foreach构造吗?这似乎比一段时间更合适。你到底想做什么?我对这些循环很熟悉,但范围各不相同。这就是我试图找出存在多少行内容的地方。我选择while的原因是不扫描所有数组。这是一个非常大的阵列,从文件中扫描,当我向下移动时,我需要每个部分的结果。4/1对于您的示例,4/4/1对于我的示例给定原始问题,我假设ArgumentOutOfRangeException是由SubString方法引起的。