當C#CodeContracts靜態檢查器已啓用時,我有幾種方法報告警告「代碼合同:要求未經證實:構造函數!= null」。診斷'CodeContracts需要未經證實:構造函數!= null'?
這些特定的方法不會聲明任何合約,也不會被任何方法調用。
如果我雙擊警告,visual studio會引導我執行對象的行。下面是有問題的方法之一:
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查詢正被解構成一些(可能爲null)IQueryable
對象,它會調用Join()
,導致此警告。
這與CodeContracts靜態檢查器有什麼關係?另外,爲什麼檢查者抱怨,我該怎麼做才能解決這個問題?
可能在調用ToList()之前檢查查詢是否爲null等於? –
我試過了,但是Resharper表示'(query!= null)'總是會評估爲true。我甚至忽略了Resharper的建議,並用查詢的空檢查重建,並沒有任何效果。 – Rob
請勿在「C#」前添加標題。這就是標籤的用途。 –