我正在 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
}
}
答案 0 :(得分:5)
expectedExceptionType
是Type
类型的实例,本身不是编译时类型。因此写下这个:
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
}