我创建了自己的类库,我有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
答案 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;
}