Я не могу найти, "не" оператор в C#. Например, у меня есть код, ниже которого не работает. Я должен проверить это err
не имеет класса типа ThreadAbortException
.
catch (Exception err)
{
if (err is not ThreadAbortException)
{
}
}
Просто измените блок catch на :
catch(ThreadAbortException ex)
{
}
catch(Exception ex)
{
}
, чтобы вы могли обрабатывать исключения ThreadAbortExceptions и все остальные отдельно.
Скорее всего, в этой ситуации вам следует сделать следующее:
try
{
// Do Something
}
catch (ThreadAbortException threadEx)
{
// Do something specific
}
catch (Exception ex)
{
// Do something more generic
}
У вас может быть несколько блоков catch
для ] попробуйте
. Всегда следите за тем, чтобы они располагались так, чтобы наиболее конкретные были сверху, а наиболее общие ( catch (Exception ex)
) были последними, потому что порядок поиска - сверху вниз, поэтому, если вы поместите catch (Exception ex)
первым, он всегда будет запускаться единственным.
Возможно, вы ищете это:
if(err.GetType() != typeof(ThreadAbortException))
{
}
Но я настоятельно рекомендую использовать отдельный оператор catch, как предложил Ли.
catch(ThreadAbortException ex)
{
}
catch(Exception ex)
{
}
У вас должно получиться что-то вроде этого:
catch (Exception err){
if (!(err is ThreadAbortException)) {
//Code
}
}
В этом случае оберните и проверьте логическое значение напротив:
if (!(err is ThreadAbortException))
Lee дал лучший ответ.
Просто добавлю, что вы всегда должны переходить от самого конкретного к самому общему. В вашем случае ThreadAbortException
является наиболее специфичным, так что сначала разберитесь с ним.