title: Catch block never firing inside a LINQ statement
body: <p>I have some data I am deserializing inside a <code>Linq</code> statement:</p>
  
  <pre><code>var scheduledData = results
     .Where(o =&gt; o.Result.IsValid)
     .SelectMany(o =&gt; JsonConvert.DeserializeObject&lt;List&lt;CalendarJob&gt;&gt;(o.Result.Response))
     .ToList();
  </code></pre>
  
  <p>This is throwing an error. I never see this error in the debugger. The returned web page lists a 500 error showing this. So I added some handing:</p>
  
  <pre><code>var scheduledData = results
     .Where(o =&gt; o.Result.IsValid)
     .SelectMany(o =&gt; {
        try {
           return JsonConvert.DeserializeObject&lt;List&lt;CalendarJob&gt;&gt;(o.Result.Response);
        }
        catch {
           return new List&lt;CalendarJob&gt;();
        }
     })
     .ToList();
  </code></pre>
  
  <p>Yes this is really ugly. I <strong>only</strong> did this so I could put a breakpoint on the <code>catch</code> block so I could inspect some values. This is not code I would leave in place! :)</p>
  
  <p>I put a breakpoint on the <code>return</code> statement inside the <code>try</code> block and also the <code>catch</code> block. Then I execute the code. The <code>try</code> statement hits and execution is gone. The <code>catch</code> block never fires nor does any other code in my method.</p>
  
  <p>Should this <code>catch</code> block be allowed in <code>linq</code>? I sure thought so?</p>
  
  <p>Yes, I am in debug mode. Yes, I have cleaned and rebuilt. The breakpoint on my try block does indeed hit. I can inspect the value of the string about to be deserialized and the value is not right. It's <code>""</code>. I do not mean <code>string.Empty</code>, I specifically mean the string contains two bytes and both are the double quote character. The service I am getting the data from is not returning good data. But my <code>catch</code> block never fires.</p>
  
  <p>One more thing to note. I put the entire thing into a <code>try...catch</code> block and that catch block <em>does</em> hit. Only the one inside <code>LINQ</code> does not.</p>