2016-04-12 1 views
0

У меня есть этот код из примера PushSharp, в котором подробно описано, как обрабатывать исключения. По какой-то причине все условия else выделены Resharper, указав, что The expression is always false. Я не понимаю, как это возможно.Resharper утверждает, что условие if else никогда не будет удалено, почему?

// ex is an Exception passed in to the method 
if (ex is NotificationException) 
{ 
    // Deal with the failed notification 
    var notification = ((NotificationException)ex).Notification; 
    var logItem = new PushLog($"{typePrefix} Notification failed", $"Notification Failed: {notification}"); 
    _pushLogRepo.Insert(logItem); 
} 
else if (ex is DeviceSubscriptionExpiredException) // Resharper says this is always false 
{ 
    // exception handling code... 
} 
else if (ex is RetryAfterException) // Resharper says this is always false 
{ 
    // exception handling code... 
} 
else 
{ 
    Console.WriteLine("Notification Failed for some (Unknown Reason)"); 
} 

Может кто-нибудь объяснить, как это возможно? Я не понимаю, как это может быть. Вот скриншот от VS2015, который немного яснее с подсветкой синтаксиса - проигнорируйте ошибку, я нахожусь в центре рефакторинга.

enter image description here

+0

Какое исключение оно передается? Что это значит? – oppassum

+0

Это простое «Исключение». Это обеспечивается методом обработки ошибок, предоставляемым библиотекой, которую я использую. –

+0

, что библиотека может вызывать определенный тип исключения, даже если он входит в качестве общего. Или это может быть ошибка resharper. кто знает. – oppassum

ответ

8

Это может случиться, если эти классы наследуют NotificationException, с тех пор первая ветвь всегда будет хитом.

+0

* [Bangs head] * Конечно. Ты прав. Должен заметить это. Для доказательства: https://github.com/Redth/PushSharp/blob/master/PushSharp.Core/Exceptions.cs. благодаря –

Смежные вопросы