我刚刚开始学习C#中的错误处理和异常,并且我正在尝试找到一种方法,如果我使用throw new System.Exception()
,则设置特定的错误消息。
例如,我有一个类,在其中我定义了一个自定义数据类型Vector
,我包含的方法之一是基于索引来Set
和Get
Vector
(实际上只是1D数组(中的值。如果由于某种原因传递了一个无效的索引(例如,索引<1或大于向量的大小(,我想抛出一个异常。
例如。
Vector v = new Vector(3); //initialize a vector with 3 components
v[4] = 1; //try to store value in memory outside the range of the vector
在Vector类代码中,我尝试了如下操作:
try
{
if(index < 0 || index >= vector.length)
{
throw new System.Exception("Invalid index used to set vector component value"); //throw exception with new message
}
}
catch (Exception e)
{
Console.Writeline("Message: {0}", e.Message);
}
在我看来,这将在控制台中显示新消息">用于设置矢量分量值的无效索引";而是只显示与CCD_ 6〃相关联的消息索引在数组的边界之外";。
有人能解释一下这样做的正确方法是什么吗?我知道我可以只使用IndexOutOfRangeException()
并将其留在那里,但我真的希望能够编写自己的错误消息,这样它们可以更容易地进行故障排除。提前谢谢!
编辑
有人指出,我抛出异常的if
条件是问题所在,我将第二个条件设置为>
,而它应该是>=
。我已经修复了它,现在它像预期的那样工作。
然后不要先catch
泛型异常。。而是先捕获特定的异常,然后捕获一般异常
catch (IndexOutOfRangeException e)
{
Console.Writeline($"Message: {e.Message + "t" + "Invalid index used to set vector component value"}");
}
catch (Exception e)
{
Console.Writeline("Message: {0}", e.Message);
}