İngilizce dilinde oku

Aracılığıyla paylaş


Exception.GetBaseException Yöntem

Tanım

Türetilmiş bir sınıfta geçersiz kılındığında, sonraki bir veya daha fazla özel durumun kök nedeni olan değerini döndürür Exception .

C#
public virtual Exception GetBaseException ();

Döndürülenler

Exception

Özel durumlar zincirinde ilk özel durum oluştu. InnerException Geçerli özel durumun özelliği null başvuruysa (NothingVisual Basic içinde), bu özellik geçerli özel durumu döndürür.

Uygulamalar

Örnekler

Aşağıdaki kod örneği türetilmiş Exception iki sınıfı tanımlar. Bir özel durumu zorlar ve sonra türetilmiş sınıfların her biriyle yeniden oluşturur. Kod, özgün özel durumu almak için yönteminin kullanımını GetBaseException gösterir.

C#
// Example for the Exception.GetBaseException method.
using System;

namespace NDP_UE_CS
{
    // Define two derived exceptions to demonstrate nested exceptions.
    class SecondLevelException : Exception
    {
        public SecondLevelException( string message, Exception inner )
            : base( message, inner )
        { }
    }
    class ThirdLevelException : Exception
    {
        public ThirdLevelException( string message, Exception inner )
            : base( message, inner )
        { }
    }

    class NestedExceptions
    {
        public static void Main()
        {
            Console.WriteLine(
                "This example of Exception.GetBaseException " +
                "generates the following output." );
            Console.WriteLine(
                "\nThe program forces a division by 0, then " +
                "throws the exception \ntwice more, " +
                "using a different derived exception each time.\n" );

            try
            {
                // This function calls another that forces a
                // division by 0.
                Rethrow( );
            }
            catch( Exception ex )
            {
                Exception current;

                Console.WriteLine(
                    "Unwind the nested exceptions " +
                    "using the InnerException property:\n" );

                // This code unwinds the nested exceptions using the
                // InnerException property.
                current = ex;
                while( current != null )
                {
                    Console.WriteLine( current.ToString( ) );
                    Console.WriteLine( );
                    current = current.InnerException;
                }

                // Display the innermost exception.
                Console.WriteLine(
                    "Display the base exception " +
                    "using the GetBaseException method:\n" );
                Console.WriteLine(
                    ex.GetBaseException( ).ToString( ) );
            }
        }

        // This function catches the exception from the called
        // function DivideBy0( ) and throws another in response.
        static void Rethrow()
        {
            try
            {
                DivideBy0( );
            }
            catch( Exception ex )
            {
                throw new ThirdLevelException(
                    "Caught the second exception and " +
                    "threw a third in response.", ex );
            }
        }

        // This function forces a division by 0 and throws a second
        // exception.
        static void DivideBy0( )
        {
            try
            {
                int  zero = 0;
                int  ecks = 1 / zero;
            }
            catch( Exception ex )
            {
                throw new SecondLevelException(
                    "Forced a division by 0 and threw " +
                    "a second exception.", ex );
            }
        }
    }
}

/*
This example of Exception.GetBaseException generates the following output.

The program forces a division by 0, then throws the exception
twice more, using a different derived exception each time.

Unwind the nested exceptions using the InnerException property:

NDP_UE_CS.ThirdLevelException: Caught the second exception and threw a third in
 response. ---> NDP_UE_CS.SecondLevelException: Forced a division by 0 and thre
w a second exception. ---> System.DivideByZeroException: Attempted to divide by
 zero.
   at NDP_UE_CS.NestedExceptions.DivideBy0()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.NestedExceptions.DivideBy0()
   at NDP_UE_CS.NestedExceptions.Rethrow()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.NestedExceptions.Rethrow()
   at NDP_UE_CS.NestedExceptions.Main()

NDP_UE_CS.SecondLevelException: Forced a division by 0 and threw a second excep
tion. ---> System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CS.NestedExceptions.DivideBy0()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.NestedExceptions.DivideBy0()
   at NDP_UE_CS.NestedExceptions.Rethrow()

System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CS.NestedExceptions.DivideBy0()

Display the base exception using the GetBaseException method:

System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CS.NestedExceptions.DivideBy0()
*/

Açıklamalar

Özel durumlar zinciri, zincirdeki her özel durumun özelliğinde başvurulan InnerException özel durumun doğrudan sonucu olarak oluşmasını sağlayan bir dizi özel durumdan oluşur. Belirli bir zincir için, zincirdeki diğer tüm özel durumların kök nedeni olan tam olarak bir özel durum olabilir. Bu özel durum temel özel durum olarak adlandırılır ve InnerException özelliği her zaman null başvuru içerir.

Bir özel durum zincirindeki tüm özel durumlar için yöntemin GetBaseException aynı nesneyi (temel özel durum) döndürmesi gerekir.

GetBaseException Bir özel durumun kök nedenini bulmak istediğinizde ancak geçerli özel durumla ilk özel durum arasında oluşmuş olabilecek özel durumlar hakkında bilgiye ihtiyacınız olmadığında yöntemini kullanın.

Devralanlara Notlar

Yöntemi GetBaseException , özel durum içeriği veya biçimi üzerinde denetim gerektiren sınıflarda geçersiz kılınmış.

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0