如何确定Exception的基类是否为OperationCanceledException?

时间:2017-08-29 13:36:31

标签: c# inheritance exception exception-handling xamarin.forms

我得到TaskCanceledException

TaskCanceledException

然后我将此异常作为Exception传递给另一个方法。如果我检查类型

if (ex.GetType() == typeof(OperationCanceledException))
    // ...

他没有介入这个if条款。如何检查异常的基本类型是否为OperationCanceledException

GetType()仅适用于TaskCanceledExceptionGetType().BaseType在此处不可用,IsSubclassOf()也不可用。我不在try-catch了。

2 个答案:

答案 0 :(得分:4)

你有各种可能性:

  • is运营商:

    if (ex is OperationCancelledException)
    
  • as运算符(如果您想进一步使用该异常):

    OperationCancelledException opce = ex as OperationCancelledException;
    if (opce != null) // will be null if it's not an OperationCancelledException
    
  • IsAssignableFrom的反思(评论说在Xamarin中不起作用):

    if (typeof(OperationCancelledException).IsAssignableFrom(ex.GetType())
    

在C#7中,您可以进行模式匹配:

if (ex is OperationCancelledException opce)
{
    // you can use opce here
}

答案 1 :(得分:3)

ex is OperationCanceledException是最佳选择。

但是如果你真的需要反射/类型对象,试试这个:

typeof(OperationCanceledException).IsAssignableFrom(ex.GetType())

Type.IsAssignableFrom on MSDN