2016-04-12 14 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

そのライブラリは、たとえそれがジェネリックとして入ってきたとしても、特定のタイプの例外をスローするだけです。 また、再サーザーエラーである可能性があります。知るか。 – oppassum

答えて

8

これらのクラスはNotificationExceptionを継承するならば、最初の分岐は常にヒットしまうので、これは、起こるでしょう。

+0

* [Bangs head] *もちろんです。あなたが正しい。それに気づいたはずです。証明のため:https://github.com/Redth/PushSharp/blob/master/PushSharp.Core/Exceptions.cs。ありがとう –

関連する問題