2016-04-03 70 views
1

我有一些引发异常的函数。我希望捕获它们的代码块也会根据抛出的异常抛出异常,但会抛出更多参数,如ID和Note。我怎样才能做到这一点?存在异常的继承异常

如果任何人都可以给我的方向,它会很好!

感谢(抱歉,我的英语...)

示例我想要的东西(我知道是不是有效的代码...)

catch (Exception e) 
{ 
    LogException l=e; 
    l.Note = "note..."; 
    l.ID = 12; 
    throw l; 
} 
+0

构建一个包含所有参数的“State”类。然后将该类传递给异常处理程序。变量'e'可以包含一个类。 – jdweng

+0

为什么不在第一个实例中抛出'LogException'? –

+0

@DarrenYoung是不是我的代码,总是抛出异常,因为我没有完全控制异常类型 –

回答

1

试试这个。

try 
{ 
    //....kaboom 
} 
catch (Exception ex) 
{ 
    var newEX= new Exception("custom message", ex); 
    newEX.Data.Add("any key", "any obj"); 
    throw newEX; 
} 
+1

这是更好的答案,除了你应该创建自己的异常类型,而不是抛出异常。你可能想编写自己的顶级处理程序,它递归地遍历所有内部异常并编译所有要记录的消息和堆栈跟踪的相当清单。你不应该把它叫做LogException,异常名称应该告诉你关于这个问题的一些事情,而不是你在捕获它时想要做什么。 –

2

您需要定义自己的异常(继承自Exception)具有这些额外属性。请参阅这里了解自定义异常应采取的基本格式 https://msdn.microsoft.com/en-us/library/ms229064(v=vs.100).aspx (请注意,您应该使异常可序列化。)您只需添加您的额外属性。

一旦你创建了异常类(在你的情况下是LogException),那么你的上面的代码将工作。