【问题标题】:How to throw the exception in this case - c#在这种情况下如何抛出异常 - c#
【发布时间】:2013-05-01 21:13:12
【问题描述】:

好吧,我有一个类,它的构造函数检查文件是否存在。如果文件不存在,我会抛出一个新异常。

问题是当抛出异常时,用户可以看到我所有的代码...

没办法,异常是从用户实例化类的地方检测到的?

例如

异常的启动发生在这里,这样程序员就可以在类中看到它了

if (!File.Exists(FileLocation))
        {
            throw new TFDException("File not found in the provided directory.");
        }

但是想在这里发生,那是我实例化类的地方

TFDConnection con = new TFDConnection("D:\\File.tfd");

【问题讨论】:

  • 为什么不将 ctor 调用包装在 try-catch 块中?
  • 我想你想看看异常的 StackTrace。 msdn.microsoft.com/en-us/library/…
  • 好吧,DLL 将被程序员使用。我的情况是使用 DLL 的程序员在实例化类时没有打开 try .. catch? (有意或无意)。是我在制作这个库的地方,应该有完全的业务规则安全性.. 直到我们得到付费的混淆器代码(即使不是完全防止,而是更困难)。因此,在我的脑海中,有可能在类和结构中,如 SqlConnection、FileInfo 等......被这样对待,我们最终所做的处理也必须给出相同的结果不是吗?情况是。如何得到这个结果。

标签: c# exception case throw


【解决方案1】:

你可以这样做

try
{
    TFDConnection con = new TFDConnection("D:\\File.tfd");
}
catch(Exception exx)
{
}

捕捉异常

【讨论】:

  • 好吧,DLL 将被程序员使用。我的情况是使用 DLL 的程序员在实例化类时没有打开 try .. catch? (有意或无意)。是我在制作这个库的地方,应该有完全的业务规则安全性.. 直到我们得到付费的混淆器代码(即使不是完全防止,而是更困难)。因此,在我的脑海中,有可能在类和结构中,如 SqlConnection、FileInfo 等......被这样对待,我们最终所做的处理也必须给出相同的结果不是吗?情况是。如何得到这个结果。呸呸
【解决方案2】:

如果在 pdb 文件中定义的同一位置的其他程序员无法使用源代码,他们将不会在异常中看到实际的源代码。但总的来说,如果其他程序员真的想找到发生了什么,那么即使是混淆器也无济于事,他们只会让它变得更难...... 但还有一件事——为什么你在构造函数中抛出异常?这不是很好的做法,因为它可能会使一些资源处于未知状态...最好避免此类事情

【讨论】:

  • 这正是我所做的。 System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("kkkkk"); con.Open(); 请注意,我没有打开try .. catch,当抛出异常时,她进入了库SqlConnection ......她只是给出了实例化的错误。你可以在我的图书馆里这样做吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 2012-12-16
  • 2014-09-18
相关资源
最近更新 更多