那么最好使用try/catch吗?

Izi*_*kon 8 c# exception try-catch

什么时候最好使用try和catch?当我使用try和catch(有些甚至-1我......)回答问题时,我得到了愤怒的回答.我用谷歌搜索它并找到了这篇文章以及这个stackoverflow 问题.

我举一些例子:

  1. 我有一个带有时区ID的下拉列表,当用户选择他的时区时我正在更新数据库.在其他应用程序中,我从数据库中提取该值并重新计算用户当前时间和日期.可以选择DB中的数据拼写错误(DB或bug中的硬编码更改).在用户的日期时间的转换方法我正在使用try和catch,有些人告诉我这是错误的!我可以使用for循环来检查数据库中的值,但是每次转换日期时间都要花费更多...

  2. 我必须声明XML文件是否使用此代码格式良好:

    protected bool IsValidXML(string xmlFile)
    {
        try
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xmlFile);
        }
        catch(XmlException ex)
        {
            ///write to logger
            return false;
        }
        return true;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    我看不到任何其他方法来检查xml文件.

  3. 有时我在我的应用程序中有一部分我正在写一个文件.写入文件可能会导致exeprtion,原因很多,其他一些进程在写入或其他时使用此文件.所以我通常使用这段代码:

     using (StreamWriter w = new StreamWriter(fs))
     {
         try
         {
             w.Write("** (Line) " + someValue + " **" + Environment.NewLine);                       
             w.Flush();                       
         }
         catch(IOExeption ex){}
         finally
         {
             w.Close();   
         }
     }
    
    Run Code Online (Sandbox Code Playgroud)

总之,我看到了一些使用try和catch以及不使用方法的方法.我看到的文章中的一句话说如果发生异常,你需要知道它.,但是在大多数时候处理泛型应用程序时,我知道会发生异常,但大多数时候我都不知道它为什么会发生,所以我以前无法捕捉到它(就像我写的那些例子),所以何时最好使用try和catch

在ASP.NET中的同一级别,页面有一个Error事件,您可以像这样捕获:

this.Error += new EventHandler(Page_Error); //this = instance of System.Web.UI.Page
Run Code Online (Sandbox Code Playgroud)

事件是否与try catch问题相同?

Kri*_*ten 4

如何处理异常取决于异常的性质以及异常发生的上下文。

聪明的人写了关于这个主题的优秀文章,我当然可以推荐:

关于你的例子:

在情况 1 中,您可能确实想要采取防御措施。但随后请确保您在该 catch 块中做了一些明智的事情。

情况 2 看起来很合理,但您阅读 XML 文档只是为了将其丢弃。处理它是否更有意义?

在情况 3 中,您使用的是 try finally,这绝对与 try catch 不同。在您的具体示例中,您甚至不需要它,因为 using 语句已经确保文件将被关闭。