IS NOT оператор в С#

Я не могу найти оператор "не является" в С#. Например, у меня есть код ниже, который не работает. Мне нужно проверить, что err не относится к типу class ThreadAbortException.

    catch (Exception err)
    {
        if (err is not ThreadAbortException)
        {
        }
    }

Ответы

Ответ 1

Просто измените блок catch на:

catch(ThreadAbortException ex)
{
}
catch(Exception ex)
{
}

чтобы вы могли обрабатывать ThreadAbortExceptions и все остальные отдельно.

Ответ 2

В этом случае оберните и проверьте значение boolean напротив:

if (!(err is ThreadAbortException))

Ответ 3

Скорее всего, что вы должны сделать в этом случае:

try
{
   // Do Something
}
catch (ThreadAbortException threadEx)
{
   // Do something specific
}
catch (Exception ex)
{
   // Do something more generic
}

У вас может быть несколько блоков catch для try. Всегда заказывайте их так, чтобы наиболее конкретный был сверху, а самый общий (catch (Exception ex)) является последним, потому что порядок поиска сверху вниз, поэтому, если вы поместите catch (Exception ex) во-первых, это всегда будет только один.

Ответ 4

Вы должны сделать что-то вроде этого:

catch (Exception err){
    if (!(err is ThreadAbortException)) {
    //Code
    }
}

Ответ 5

Возможно, вы ищите это:

if(err.GetType() != typeof(ThreadAbortException))
{

}

Но я настоятельно рекомендую использовать отдельную инструкцию catch, как это предложил Ли.

catch(ThreadAbortException ex)
{

}
catch(Exception ex)
{

}

Ответ 6

Ли имеет лучший ответ.

Просто чтобы добавить, вы всегда должны улавливать от самых конкретных до самых общих. В вашем случае ThreadAbortException является наиболее конкретным, поэтому сначала применим это.