为什么我的例外显示如此?

时间:2014-02-24 09:44:15

标签: c# exception

我创建了自己的类库,我有create()这样的方法:

public  int create()
{
    try
    {
        if(path!=null){
        //do somethings
        }
        else{
        throw new ArgumentNullException("path cannot be null ro empty", "path");
        }
        catch{
        throw;
        }
        return 0;
    }
}

在另一个项目中,我添加了我的类库DLL,当我使用我的库方法时,由于例如path=null的某些东西,我的方法抛出一个异常,我得到了我写的throw在捕获内... 我不想那样,我怎么能在我的项目中调用create()方法得到错误

谢谢

抱歉,我不知道英语很好所以我再试一次说出我的意思 我尝试创建类库,我想让它到其他人使用,我想在我的create()方法抛出异常时,视觉工作室突出显示创建方法被调用的行,但它打开我的dll并去创建方法并突出显示我写的行; ...我该如何解决?

............................................... .....................................

最后我找到了答案,看到这个链接: Hiding code from a DLL while debugging

4 个答案:

答案 0 :(得分:0)

要在抛出异常时将调试器停在正确的行,您所要做的就是删除try catch块(在您的情况下完全不需要):

public  int create()
{      
    if(path==null)
        throw new ArgumentNullException("path", "path cannot be null or empty");

    // do something

    return 0;
}

同样正如Oscar指出的那样,你应该在抛出异常时切换参数,因为第一个参数是参数名,第二个参数是消息。

答案 1 :(得分:0)

您已经交换了ArgumentNullException构造函数的参数。首先是param名称,后来是消息。

public ArgumentNullException(
    string paramName,
    string message
)

http://msdn.microsoft.com/es-es/library/k8a0dfcy(v=vs.110).aspx

此外,您可以安全地删除catch子句,因为您在那里什么都不做。只捕捉你想要以某种方式处理的异常,否则,让它冒泡。

答案 2 :(得分:0)

当您重新抛出异常时,每个方法中只保存一个堆栈帧,因此,您无法找出引发异常的行,只能找到重新抛出它的行。您可以在第一次捕获消息时记录消息,或者不重新抛出消息,而是抛出新异常,并将捕获的异常作为内部异常提供。

答案 3 :(得分:-1)

您可以在尝试之前进行检查:

public  int create(){
 if(path!=null){
     try{

     //do somethings
      }
     catch{
      throw;
  }
  else{
      throw new ArgumentNullException("path cannot be null ro empty", "path");
  }
  return 0;
}