2016-06-20 13 views
2

Ich habe unter Code und frage mich, warum sonst Teil wie ReSharper unerreichbar ist.Resharper Warnungscode heuristisch nicht erreichbar

private bool SomeMEthod(some parameter) 
{ 
    bool status = false; 
    var someCollection = _entity.CustomerPaymentStatus.Where(record => record.CustomerPaymentId == paymentId && record.CurrentRecord == true); 
    if (someCollection != null) 
    { 
     var receivedPayment = someCollection.FirstOrDefault(); 
     /*some code to save data into DB*/ 
     status = true; 
    } 
    else 
    { 
     //Some code here to log failure scenario 

     //here Resharper giving me warning 
     //code is heuristically unreachable 
    } 
    return status; 
} 

Ich habe einige Post überprüft, aber nicht klar, wie Code is heuristically unreachable

Jeder Gedanke bitte.

+4

'Where' sollte nie' null' zurück, sondern könnte eine leere Sequenz zurückkehren, so dass Ihre 'if' Zustand wird immer auswerten zu' true'. – Lee

Antwort

5

.Where() nie null zurück, aber immer wieder ein IEnumerable<T> (oder IQueryable<T>. Die zählbaren 0 Produkte haben könnte, aber es ist immer noch ein Nicht-Null-enumerable.

+0

Und wenn '_entity.CustomerPaymentStatus' null ist, dann wird eine Ausnahme ausgelöst und 'else' wird nicht erreicht. –

+0

@KooKiz: Ja, natürlich. Aber eine 'NullReferenceException' ist ein ganz anderes Problem;) – knittl

2

Die Linq Where Abfrage wird eine leere IEnumerable zurück, wenn keine passenden Datensätze gefunden werden, so dass es sehr unlikly ist, dass someCollection jemals null sein wird - obwohl ReSharper scheint nicht völlig sicher zu sein, über sie.

Siehe auch MSDN Where

0

Unter der Annahme, _entity ist ein DbContext Wo dann immer wieder ein IQueryable-Objekt.

IQueryable<T> someCollection = _entity.CustomerPaymentStatus.Where(...); 

Die IQueryable Objekt nie null ist (sonst würden Sie nicht in der Lage sein, es zu fragen).

Das Testen dieses Objekts für null führt die Abfrage nicht aus. So

if (someCollection != null) 

ist die gleiche wie

if (true)