2012-11-07 32 views
6

enter image description hereCodeContracts:假警報「可能拆箱空引用」

在上面的圖片中,可以看到從代碼契約的警告。我不認爲這是合法的,因爲this永遠不可能是null

這是一個錯誤還是我錯過了什麼?


此屬性是下面的類中的一員:

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

更新:
屬性更改爲以下仍顯示警告 - 上線return result;

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

在黑暗中完成拍攝的原因我是一個noob,我相信你已經想到了它,但不能將TQuery(this)轉換爲null嗎? –

+0

請向我們展示您的類型聲明。你對這些通用參數有什麼限制? – SLaks

+0

@JesseCarter:不會。它可能會導致InvalidCastException,所以我會說這不是警告的原因。 –

回答

1

分析不知道this保證執行TQuery
因此,它警告你,你可能最終採取null參考接口類型,並返回它作爲一個struct實現該接口:

您需要添加: classTQueryInterface參數的約束。

0

根據this question,我想說你需要s說明如果演員失敗會發生什麼。

嘗試return this as TQuery因爲如果轉換失敗,as運算符將返回null,而顯式轉換將拋出錯誤。

+0

請參閱我的更新,它沒有幫助。 –