JScript.NET能否区分不同的.NET异常类型

时间:2009-02-20 18:04:31

标签: .net javascript exception

我正在使用JScript.NET在我编写的C#WinForms应用程序中编写脚本。它工作得很好,但我只是尝试在脚本中放置一些异常处理,我无法弄清楚如何判断我的C#代码抛出了什么类型的异常。

这是一些示例JScript代码,它抛出两种不同类型的CLR异常,然后尝试捕获它们并将它们分开。

function ErrorTest(name)
{
    try
    {
        if (name.length < 5)
        {
            throw new ArgumentException();
        }else
        {
            throw new InvalidOperationException();
        }
    }catch (e)
    {
        return e.name + " " + (e.number & 0xFFFF) + ": " + e.message;
    }
}

如果我拨打ErrorTest("foo"),我就会回来"Error 5022: Value does not fall within the expected range.",如果我拨打ErrorTest("foobar"),我就会回来"Error 5022: Operation is not valid due to the current state of the object."

名称和数字属性是相同的,唯一的区别是消息。我不想基于错误消息开始编写错误处理逻辑,那么有没有办法获得原始异常而不是JScript Error对象?

3 个答案:

答案 0 :(得分:3)

使用JScript .NET的类型注释支持,如下所示:

  try { }
  catch (e : ArgumentException) {
    // ...
  }

答案 1 :(得分:0)

您可以使用ErrorObject.ToException method获取原始例外,然后使用instanceof来决定如何处理它。

这有效,但我还没决定是否使用它。我认为这是滥用框架,因为文档说:

  

此API支持.NET Framework基础结构,不能直接在您的代码中使用。

此外,您还必须添加对Microsoft.JScript程序集的引用并导入Microsoft.JScript名称空间。

这是新代码:

function ErrorTest(name)
{
    try
    {
        if (name.length < 5)
        {
            throw new ArgumentException();
        }else
        {
            throw new InvalidOperationException();
        }
    }catch (e)
    {
        var ex = ErrorObject.ToException(e);
        if (ex instanceof ArgumentException)
        {
            return "bad argument";
        }
        return "something bad";
    }
}

答案 2 :(得分:-1)

你应该可以这样做:

function ErrorTest(name)
{
    try
    {
        if (name.length < 5)
        {
            throw new ArgumentException();
        }else
        {
            throw new InvalidOperationException();
        }
    }
    catch (ArgumentException e)
    {
        return "Argument Exception: " + e.message;
    }
    catch (InvalidOperationException e)
    {
        return "Operation Exception: " + e.message;
    }
    catch (e)
    {
        return "Unknown Exception: " + e.message;
    }
}

并对每种异常类型进行单独的错误处理。