Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6901249
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T07:38:58+00:00 2026-05-27T07:38:58+00:00

I have created a method like NUnit’s Throws method. Basically, the method should return

  • 0

I have created a method like NUnit’s Throws method.
Basically, the method should return true if the action it’s acting on will cause an exception of type T or any derived exception type, which is passed as a generic argument.

 Action a = () => Throw(new DerivedException());
 if(!a.Throws<BaseException>())
      throw new Exception("catastrophic error");

I have a helper Throw method that just throws an exception of a given type.
The DerivedException class derives from the BaseException class, which in turn derives from the Exception class.

The problem is that the behavior of the Throws method varies depending on whether or not the debugger is attached. If the debugger is not attached, the method does what I would expect it to do. When the debugger is attached though, it doesn’t catch the DerivedException as a BaseException, but instead catches it as an Exception.

Here’s the code to reproduce (which can go in a console application project file.):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Action a = () => Throw(new DerivedException());
            if (!a.Throws<BaseException>())
                throw new Exception("catastrophic error.");
            else
                Console.WriteLine("wow, you must not have been debugging.");
        }
        private static void Throw<T>(T exc) where T : Exception
        {
            throw exc;
        }
    }

    public static partial class ExtensionMethods
    {
        public static bool Throws<T>(this Action action) where T : Exception
        {
            try
            {
                action.Invoke();
            }
            catch (T)
            {
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.GetType());
                return false;
            }
            return false;
        }

    }


    public class BaseException : Exception
    {
    }
    public class DerivedException : BaseException
    {
    }



}

Hit F5 (debug) and it doesn’t properly catch the DerivedException.
Hit Ctrl+F5 (no debugging) and it works fine, catching the DerivedException as a BaseException.

Can someone please explain the discrepancy? Thanks.

UPDATE
I am running VS 2008 Professional Edition, with Version 3.5 SP1 of the .NET Framework. Apparently this is not an issue for later versions. Thanks everyone who tried this.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T07:38:59+00:00Added an answer on May 27, 2026 at 7:38 am

    I guess technically the answer here is to upgrade to a newer version of Visual Studio, i.e. 2010 or later.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have created a Webpage which will post as post method..not as get method.
I have created a helper method in view like this: @helper DisputeOpenedDays(DateTime createdDate) {
I would like to create a safe sum extension method that would have the
Given a DataSet, I'm left joining DataTables[1-n] onto DataTable[0]. I have created a method
I have created a new method in one of the project's controllers that it
I have created a console application that calls a method on a webservice. I
I have created a UserControl called AutorControl with a method to clear its textbox:
I have created several UI elements in the viewDidLoad method. I want to change
I have created a class library called AddServiceLibrary in which I have a method
I have created a .NET DLL which makes some methods COM visible. One method

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.