学习网址:https://docs.microsoft.com/zh-cn/dotnet/standard/exceptions/exception-class-and-properties
了解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:内部异常信息,当前异常可能是其他异常导致的,记录当前异常的原始异常。
代码:
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) { }
}
}
结果:
Message 提供有关异常原因的详细信息。一般是给用户看的。
Source 获取或设置导致错误的应用程序或对象的名称,可以自己设置异常的Source,给source丰富一下dll、命名空间、方法等。
StackTrace 错误位置的堆栈跟踪,精确到行。
来源:oschina
链接:https://my.oschina.net/u/4359017/blog/4281395