是一个'字段'但使用的类似于'' (它真的是一种类型)

时间:2016-03-30 07:39:56

标签: c# .net visual-studio

我正在 expectedExceptionType是一个'字段'但是使用了来自 if(例外是expectExceptionType)行的'类型' 错误。但是你可以看到一个类型。这有什么问题?

我正在使用Visual Studio 2013和.NET 4.5

public sealed class ExpectedInnerException : ExpectedExceptionBaseAttribute 
{
    private Type expectedExceptionType;
    private string expectedExceptionMessage;

    public ExpectedInnerException(Type expectedExceptionType, string expectedExceptionMessage)
    {
        this.expectedExceptionType = expectedExceptionType;
        this.expectedExceptionMessage = expectedExceptionMessage;
    }

    protected override void Verify(Exception exception)
    {
        if (exception is expectedExceptionType)
        {

        }
        //Some other code
    }
}

3 个答案:

答案 0 :(得分:5)

expectedExceptionTypeType类型的实例,本身不是编译时类型。因此写下这个:

protected override void Verify(Exception exception)
{
    if (exception.GetType() == expectedExceptionType)
    {

    }
    //Some other code
}

编辑:如果您的类型是expectedExceptionType所反映的类型的子类,则可以检查IsAssignableFrom

if (exception.GetType().IsAssignableFrom(expectedExceptionType.GetType()))

答案 1 :(得分:2)

HimBromBeere told you the reason,但不是解决此问题的最佳方法,因为直接检查类型不会使用接口和派生实例。

此代码执行:

protected override void Verify(Exception exception)
{
    if (exception.GetType().IsAssignableFrom(expectedExceptionType))
    {

    }
    //Some other code
}

答案 2 :(得分:0)

is运算符需要类型表达式,而不是System.Type类型的变量/字段。

兼容的解决方案:

protected override void Verify(Exception exception)
{
    if (expectedExceptionType.IsAssignableFrom(exception.GetType()))
    {

    }
    //Some other code
}