title: Exception catching best practice (c#/.net)
body: <p>If I have code like this:</p>
  
  <pre><code>void a()
  {
      try
      {
          b();
      }
      catch (MyException)
      {
          // Handle any problems that occurred in b(c(d()))
      }
  }
  
  void b()
  {
      c();
      // Do something else
  }
  
  void c()
  {
      d();
      // Do something else
  }
  
  void d()
  {
      // Do something, throw a MyException if it fails
  }
  </code></pre>
  
  <p>Assuming no cleanup is necessary at any point, is it best to put a try{}catch{throw;} around the call to d() in c() and the call to c() in b() or is it considered OK to let the exception from d() bubble up to a() "naturally" without any intervening try/catch blocks?</p>
  
  <p>I suppose the extra try/catch block act as a sort of "documentation" but they seem superfluous so I'm just wondering what other people would consider the best way.</p>
  
  <p>Sorry if this is all a bit too basic, I'm trying to get my head around exceptions but I don't seem to have a good feel for them yet.</p>