私は警告報告し、いくつかの方法持っている「コード契約を:コンストラクタ= nullを!:証明されていない必要があり、」C#CodeContracts静的チェッカが有効になっている場合を。'CodeContractsの診断には検証が必要です:コンストラクタ!= null'?
これらの特定の方法は、任意の契約を宣言していない、と行う任意の方法によって呼び出されていません。
私は警告をダブルクリックすると、Visual StudioはIQueryable<TEntity>
オブジェクトをインスタンス化ラインに私を指示します。ここで問題のある方法の一つです:
public List<IStudentTermData> GetAllActive()
{
using (IObjectContext context = ContextFactory.Create())
{
var studentTermDataSet = context.ObjectSet<IStudentTermData>();
var studentSet = context.ObjectSet<IStudent>();
// Helps out CodeContracts static checker
if(studentSet == null || studentTermDataSet == null)
return new List<IStudentTermData>();
// Selecting the warning brings me to the next line
IQueryable<IStudentTermData> query =
from studentTermData in studentTermDataSet
join student in studentSet
on studentTermData.StudentId equals student.Id
where (student.Active) select studentTermData;
return query.ToList();
}
}
私はこの警告を示さない他のいくつかの非常に類似した方法を持っている、と私は、彼らがLINQをジョインを使用していない気づきました。私は、LINQクエリがJoin()
が呼び出されてこの警告の原因となるいくつかの(おそらくnull)IQueryable
オブジェクトに分解されていると推測しています。
何これはCodeContracts静的チェッカーと関係があるのでしょうか?また、チェッカーが不平を言っている理由と、それを修正するために何ができるのですか?
多分()ToListメソッドを呼び出す前にnullの平等のためのクエリを確認しますか? –
私はそれを試みましたが、Resharperは式 '(query!= null)'は常にtrueと評価します。私はResharperのアドバイスを無視し、クエリのヌルチェックで再構築しても何の効果もありませんでした。 – Rob
タイトルに「C#」というプレフィックスを付けないでください。それはタグのためのものです。 –