我得到TaskCanceledException
:
然后我将此异常作为Exception
传递给另一个方法。如果我检查类型
if (ex.GetType() == typeof(OperationCanceledException))
// ...
他没有介入这个if条款。如何检查异常的基本类型是否为OperationCanceledException
?
GetType()
仅适用于TaskCanceledException
。
GetType().BaseType
在此处不可用,IsSubclassOf()
也不可用。我不在try-catch
了。
答案 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())