代码之家  ›  专栏  ›  技术社区  ›  Nard Dog

处理空异常C#

  •  6
  • Nard Dog  · 技术社区  · 14 年前

    好的,新的程序员在这里寻找对这个问题的一点了解。所以我有一个这样的for循环开始如下:

    for (int i = 0; i < rowHandles.Length; i++)
    {
          .........code....
    }
    

    谢谢你的帮助-新手程序员

    8 回复  |  直到 14 年前
        1
  •  10
  •   JaredPar    14 年前

    如果问题是 rowHandles 可以是 null for 陈述。

    if ( rowHandles != null ) { 
      for ( int i = 0; i < rowHandles.Length; i++ ) {
        ...
      }
    }
    

    如果没有要删除的行,另一个选项是完全禁用delete按钮。操作无效,请从一开始就阻止它。

        2
  •  6
  •   Eric Lippert    14 年前

    这里的一个重要原则是 永远不要处理本来可以阻止的异常 . 永远不应该处理空引用异常;空引用异常表示程序中应该修复的错误,而不是应该捕获和忽略的预期发生。要么编写确保该值不为空的代码,要么检测该值为空且不取消对它的引用。

        3
  •  3
  •   Kirk Woll    14 年前

    这是错误的。当有0个元素时,长度设置为0。空的可能是行句柄。你需要在进入循环之前处理好这种情况。

        4
  •  2
  •   Chris S    14 年前

    如果没有行,则rowHandles.Length将为零而不是空。如果要在循环后删除rowHandles,则可以执行以下操作:

    if (rowHandles != null)
    {
        for (int i = 0; i < rowHandles.Length; i++)
        {
              // Code
        }
    }
    

    不需要异常处理。另一方面,如果您允许在循环运行时由其他内容更改rowHandles,那就另当别论了。

        5
  •  2
  •   Oren A    14 年前

    它是 rowHandles.Length rowHandles 本身。
    一个共同的解决办法是:

    if (rowHandles != null)  
    //Your loop here
    
        6
  •  1
  •   Seattle Leonard    14 年前

    if(rowHandles != null)
    {
        //for loop
    }
    
        7
  •  1
  •   bradenb    14 年前

    我建议你尽量坚持 Single Responsibility Principle ,也就是说,您让代码做它想做的事情,并在其他地方处理错误。

    rowHandles 在其他地方使用,所以应该集中检查 null .

        8
  •  0
  •   Nate CSS Guy    14 年前

    改为a foreach 循环:

    foreach (var rowHandle in rowHandles) 
    { 
        // use rowHandle instead of rowHandles[i]
    }