La capture d'exception personnalisée en c#

J'ai créé une classe d'exception personnalisée comme ci-dessous

namespace testingEXception
{
    public class CustomException : Exception
    {            
        public CustomException()
        {
        }
        public CustomException(string message)
            : base(message)
        {
        }

        public CustomException(string message, Exception innerException)
            : base(message, innerException)
        {

        }
    }
}

Je me suis lancer une exception à partir d'un autre projet dans la même solution, comme ce

namespace ConsoleApplication1
{
    public class testClass
    {
        public void compare()
        {
            if (1 > 0)
            {
                throw new CustomException("Invalid Code");
            }
        }
    }
}

l'attraper comme ça

    namespace testingEXception
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                testClass obj = new testClass();
                obj.compare();

            }
            catch (testingEXception.CustomException ex)
            {
                //throw;
            }
            catch (Exception ex)
            {
               //throw new CustomException(ex.Message);
            }

            Console.ReadKey();
        }
    }
}

Le problème est, l'exception n'est pas se faire attraper par la première prise, mais au lieu de se faire attraper par la deuxième catch, cours de si le type de l'exception montre CustomException.

ce que vous montrez est correcte et devrait fonctionner. DONC, soit vous ne faites pas ce que vous pensez que vous êtes en train de faire ou ce qui se passe n'est pas ce que vous pensez qu'il se passe. Vérifiez que vous n'avez pas plusieurs CustomException dans différents espaces (VS, ne 'Aller à la définition de" sur le lancer et de le rattraper version de CustomeException)
Avec les "jeter" dans les captures(CustomException) il va re-jeté et être pris par catch(Exception). Est-ce que vous voyez?
sur le débogage, le débogueur n'est pas de s'arrêter sur la première capture,au lieu de s'arrêter sur la deuxième prise.
Ajouter Trace.WriteLine("CustomException"); avant la première throw;. Vous obtiendrez une erreur de compilation si catch(CustomException) a été ignorée en raison de catch(Exception)
Donc, le code que vous avez posté ne pas reproduire le problème, merci de poster le code qui permet à une personne de reproduire le problème. Il a aussi des sons qui CustomException est pas public.

OriginalL'auteur Hataf Moin | 2013-08-14