【问题标题】:Exception Handling Workaround in C#C# 中的异常处理解决方法
【发布时间】:2015-01-08 07:57:19
【问题描述】:

我试图解析一些字符串。由于我是 C# 的新手,我在某些时候很好奇,您可以在下面看到。

Lines_Array[i] 为空(Lines_Array[i].Length==0)时,它会引发异常。这已经是我在示例 #2 中想要的,在示例 #1 中没有用。

我想摆脱异常。因为零长度字符串将是我的限制。对此有任何解决方案、替代方案或解决方法吗?

示例 #1:

try
{
    if (Lines_Array[i + 6].Substring(p, 7).Trim() == "")
        break;
}
catch (ArgumentOutOfRangeException) { break; }

示例 #2: 我需要找出每页中存在多少“Groze”行。 我需要数数,直到看到带箭头的线。但它抛出异常。 截图:

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

提前致谢。

【问题讨论】:

  • 你的问题似乎有点不清楚,你想做什么?
  • 如前所述,Q 不清楚。如果您只想避免 ArgumentOutOfRangeException,只需在获取所需的 Substring 之前添加对 Lines_Array 长度的检查
  • 您熟悉for 和/或foreach 构造吗?它似乎比while 更合适。你到底想做什么?
  • 我熟悉这些循环,但范围各不相同。这就是我试图找出存在多少行内容的地方。
  • 我选择while的原因不是为了扫描所有数组。这是一个非常大的数组,从文件和 there are multiple places in one array. I need them in one pass 中扫描,当我向下移动时,我需要每个部分的结果。 (你的例子是 4/1,我的例子是 4/4/1)

标签: c# exception exception-handling


【解决方案1】:

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

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

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

【讨论】:

  • 鉴于最初的问题,我认为 ArgumentOutOfRangeException 是由 SubString() 方法引起的。
【解决方案2】:

添加检查 Lines_Array 长度是否为 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) { }

【讨论】:

    【解决方案3】:

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

    例子:

    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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      相关资源
      最近更新 更多