2012-11-07 4 views
6

enter image description hereCodeContracts:「おそらくnull参照をアンボクシング」偽の警告上の画像で

、あなたはコードの契約からの警告を見ることができます。 thisは決してnullになることができないので、これは合法だとは思わない。

これはバグですか、何か不足していますか?

:ライン return result;に - まだ警告が表示さ
次のようにプロパティを変更する:

public class NHibernateIQueryableQueryBase<TEntity, TQuery, TQueryInterface> 
    : IQuery<TEntity>, IFluentQueryInterface<TEntity, TQueryInterface> 
    where TQuery : NHibernateIQueryableQueryBase<TEntity, TQuery, 
               TQueryInterface>, 
        TQueryInterface 
    where TQueryInterface : IQuery<TEntity> 

更新:


このプロパティには、以下のクラスのメンバーであります

public TQueryInterface And 
{ 
    get 
    { 
     var result = this as TQuery; 
     return result; 
    } 
} 
+0

暗闇の中で完全なショット私はノブです。あなたはそれを考えましたが、TQuery(this)のキャストはnullを返せませんでしたか? –

+0

あなたのタイプ宣言を教えてください。これらのジェネリックパラメータにはどのような制約がありますか? – SLaks

+0

@JesseCarter:いいえ、InvalidCastExceptionが発生する可能性があるため、警告の理由ではないと言います。 –

答えて

1

thisは、TQueryの実装が保証されていると分析されていません。
したがって、あなたがインターフェイスタイプにnull参照を取って終わるかもしれないことを警告し、そのインタフェースを実装しstructとしてそれを返しています:

あなたはTQueryInterfaceパラメータの制約に: classを追加する必要があります。

0

this questionに基づいて、あなたはキャストが失敗した場合に起こることを特定します。

as演算子はキャストが失敗した場合はnullを返し、明示的キャストはエラーをスローするため、return this as TQueryを試してみてください。

+0

私の更新を見てください、それは助けにはならない。 –

関連する問題