了解Exception的常见属性。

Data:Exception的键/值对数据。

using System;using System.Collections;namespace ConsoleApp5
{    class Program
    {        static void Main(string[] args)
        {            try
            {
                NestedRoutine1(true);
            }            catch (Exception e)
            {                // 打印Data
                if (e.Data.Count > 0)
                {                    foreach (DictionaryEntry de in e.Data)
                        Console.WriteLine("    Key: {0,-20}      Value: {1}",                                          "'" + de.Key.ToString() + "'", de.Value);
                }
            }
            Console.ReadLine();
        }       

        public static void NestedRoutine1(bool displayDetails)
        {            try
            {
                NestedRoutine2(displayDetails);
            }            catch (Exception e)
            {                // 给data添加异常信息
                e.Data["ExtraInfo"] = "Information from NestedRoutine1.";
                e.Data.Add("MoreExtraInfo", "More information from NestedRoutine1.");                // throw后面不加异常对象,默认是当前异常
                throw;
            }
        }        public static void NestedRoutine2(bool displayDetails)
        {
            Exception e = new Exception("This statement is the original exception message.");            if (displayDetails)
            {                // 给data添加异常信息
                string s = "Information from NestedRoutine2.";                int i = -903;
                DateTime dt = DateTime.Now;
                e.Data.Add("stringInfo", s);
                e.Data["IntInfo"] = i;
                e.Data["DateTimeInfo"] = dt;
            }            throw e;
        }
    }
}

HelpLink:指向帮助文件的 URL,没有值就为null。

InnerException:内部异常信息,当前异常可能是其他异常导致的,记录当前异常的原始异常。

代码:

异常Exception(二)_Exception异常Exception(二)_Exception_02

using System;using System.Collections;namespace ConsoleApp5
{    class Program
    {        static void Main(string[] args)
        {           
            try
            {
                CatchInner();
            }            catch (AppException e)
            {
                Console.WriteLine("外层异常信息: {0}", e.Message);                if (e.InnerException != null)
                    Console.WriteLine("Inner exception: {0}", e.InnerException);
            }
            Console.ReadLine();
        }        public static void ThrowInner()
        {            throw new AppException("ThrowInner内部异常信息");
        }        public static void CatchInner()
        {            try
            {
                ThrowInner();
            }            catch (AppException e)
            {                throw new AppException("CatchInner外部异常信息", e);
            }
        }
    }    public class AppException : Exception
    {        public AppException(String message) : base(message)
        { }        public AppException(String message, Exception inner) : base(message, inner) { }
    }
}

View Code

结果:

异常Exception(二)_Exception_03

 

Message 提供有关异常原因的详细信息。一般是给用户看的。

异常Exception(二)_Exception_04

 

 Source 获取或设置导致错误的应用程序或对象的名称,可以自己设置异常的Source,给source丰富一下dll、命名空间、方法等。

异常Exception(二)_Exception_05

 

 StackTrace 错误位置的堆栈跟踪,精确到行。

异常Exception(二)_Exception_06