对于使用自定义异常的时机和用法很有疑惑,举个例子问一下:public int BinSearch(int[] arr , int x , int start , int end)
{
 if(start < 0 || end > arr.Count-1)
 {
  throw new IndexOutOfRangeException("");
 }
}如上例,假如要写一个查找,需要预先判断一下查找的上下限是不是超过了数组的界限,如果超过则抛出异常。
疑问如下:
1 这个异常有没有必要自己写,还是干脆让默认的异常抛出就好了,因为如果用到start和end的时候,如果会越界,程序自己也会抛出异常
2 如果要自己写这个异常,需不需要定义excetion.source之类的东西,我只知道可以在.message属性里写上"XX函数出错"这样的信息
3 如果要在抛出的异常中写出namespace.classname.functionname这样形式的路径以方便出异常的时候查找位置,那么有什么方法可以获得namespace.classname.functionname这样的函数全名呢?

解决方案 »

  1.   

    public int BinSearch(int[] arr , int x , int start , int end)
    {
     if(start < 0 || end > arr.Count-1)
     {
      throw new IndexOutOfRangeException("namespace.classname.functionname");
     }
    }
      

  2.   

    1 这个异常有没有必要自己写
        是没有必要2 如果要自己写这个异常,需不需要定义excetion.source之类的东西
        也没有必要, Exception里面已经有挺多信息了:
      catch(Exception e)
      {
        MessageBox.Show(e.TargetSite.DeclaringType.Name + "."+ e.TargetSite.Name);
        MessageBox.Show(e.StackTrace);
      }