C#用户定义的异常,在异常之间转换?

时间:2011-01-19 19:41:24

标签: c# exception exception-handling casting

1)我创建了一个测试异常。

public class TestException : Exception
{
    string info;
    public string Info { get { return info; } set { info = value; } }
    public TestException() { }
    public TestException(string message) : base(message) { }
    public TestException(string message, Exception inner) : base(message, inner) { }
    protected TestException(
      System.Runtime.Serialization.SerializationInfo info,
      System.Runtime.Serialization.StreamingContext context)
        : base(info, context) { }
}

2)在网站某处的某个功能中,我得到了类似的内容:

catch (Exception e)
{
    TestException myOwnException = new TestException(e);
    myOwnException.Info = "test";
    LogError(myOwnException);
}

但是我不能从基础异常转换到我的班级。 logError需要TestException。

我尝试在我的Exception类中创建它(允许我编写TestException myOwnException = e;)

public static implicit operator TestException(Exception e)
{
    return new TestException(e);
}

但我一直在接受: 不允许在基类之间进行用户定义的转换。

如何将catch语句中的异常强制转换为TestException类? (我也尝试过TestException test =(TestException)e;但是这只会返回一个错误。

2 个答案:

答案 0 :(得分:3)

我会保持这么简短,你就是无法做到这一点。您需要更改LogError()方法以接受Exception对象。如果需要任何其他状态(如Info),则将其作为参数添加到LogError()方法中。或者过载。

答案 1 :(得分:0)

  

但是我无法从基地投下   我班的例外。 logError   期待一个TestException。

帖子中的代码不涉及从Exception到TestException的强制转换。 LogError中是否存在强制转换?如果您不确定,可以发布LogError的内容吗?您在不尝试添加隐式强制转换运算符的情况下看到的问题的确切细节也会有所帮助。