在C#中不是运算符

Tom*_*mas 15 c# operators

我在C#中找不到"is not"运算符.例如,我有下面的代码不起作用.我需要检查它err不是类型类ThreadAbortException.

    catch (Exception err)
    {
        if (err is not ThreadAbortException)
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

Nic*_*ver 35

在这种情况下,包装并检查对面的布尔值:

if (!(err is ThreadAbortException))
Run Code Online (Sandbox Code Playgroud)


Lee*_*Lee 35

只需将catch块更改为:

catch(ThreadAbortException ex)
{
}
catch(Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)

所以你可以分别处理ThreadAbortExceptions和所有其他的.

  • 确保将更一般的Exception对象放在底部.你应该总是从更精确的类型开始,然后使用更一般的类型. (3认同)
  • 哇,那很接近.我讨厌在任何地方看到`!(a是B)! (2认同)

Nic*_*ick 7

在这种情况下你应该做的很多事情是:

try
{
   // Do Something
}
catch (ThreadAbortException threadEx)
{
   // Do something specific
}
catch (Exception ex)
{
   // Do something more generic
}
Run Code Online (Sandbox Code Playgroud)

你可以有多个catchtry.始终确保对它们进行排序,使得最具体的位于顶部,并且最通用的(catch (Exception ex))是最后的,因为查找顺序是从上到下,因此如果放置第catch (Exception ex)一个,它将始终是唯一运行的.