2016-06-20 12 views
2

私は以下のコードを持っていて、resharperごとにその部分が到達不能である理由が不思議です。Resharperの警告コードヒューリスティックに到達不能

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; 
} 

私はポストのカップルの確認が、Code is heuristically unreachable

のような明確されていない任意の思想ください。 ReSharperのは、それについてcompletly確認するようには見えませんが - 一致するレコードが見つからない場合、someCollectionが今までnullになることを非常にunliklyあるので

+4

と同じである 'WHERE'ので、あなたの' if'条件は常に 'true'に評価され、' null'なのでを返すことは決してありませんが、空のシーケンスを返すことがあります。 – Lee

答えて

5

.Where()を参照してくださいnullを返しませんが、常にIEnumerable<T>(またはIQueryable<T>を返します。列挙は0アイテムを持っているかもしれないが、それはまだnull以外の列挙ですん。

+0

'_entity.CustomerPaymentStatus'がnullの場合、例外がスローされ、elseにも到達しません –

+0

@KooKiz:もちろん、そうです。しかし、 'NullReferenceException'はまったく別の問題です;) – knittl

2

LINQのWhereクエリは、空のIEnumerableを返します。

またMSDN Where

0

_entityはDbContextであると仮定すると、 、その後、どこ常にのIQueryableオブジェクトを返します。

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

たIQueryableオブジェクトがnullになることはありませんこと(そうでない場合、あなたがそれを照会することができません)。

nullのオブジェクトをテストすると、クエリが実行されません。だから、

if (someCollection != null) 

if (true) 
関連する問題