使用Enumerable.Cast
:
return query.Cast<ICompany>().ToList();
幾點意見:
List<Company> companies = new List<Company>();
這將創建一個新的列表。但是你從來沒有使用它,因爲兩行以後你
companies = query.ToList();
覆蓋您所創建的列表(和在中間線你永遠參考companies
)。如果你願意,你可以聲明並獲得一舉結果:
List<Company> companies = query.ToList();
其次,這一切都是不必要的,如果你只是想返回結果的列表。簡潔(在某種程度上)是編程方面的一大優勢。 「越少越好」的意思是,越少的代碼意味着寫入的代碼越少,測試代碼越少,維護代碼越少。通過編寫更少的代碼提高生產力!這是你的方法的短版:
public List<ICompany> FindAll() {
var query = from c in _scope.Extent<Company>()
select c;
return query.Cast<ICompany>().ToList();
}
甚至
public List<ICompany> FindAll() {
return _scope.Extent<Company>().Cast<ICompany>().ToList();
}
第三,至少,你應該考慮回國的IList
代替List
。編碼到接口而不是具體類型更好。這將您的代碼從實現細節中分離出來,使代碼更易於更改並更易於測試。
最後,你應該檢查你是否真的需要返回List
。你使用的是什麼方法?如果你只是用它來枚舉結果(foreach(var item in list)
),那麼你應該將返回一個IEnumerable<ICompany>
:
public IEnumerable<ICompany> FindAll() {
return _scope.Extent<Company>().Cast<ICompany>();
}
+1對於很好的解釋(並根據最後的評論進行調整...) – 2010-01-05 01:25:32
是的,謝謝你指出,這使我給他的代碼比我最初做的更仔細的檢查。 – jason 2010-01-05 01:46:57
偉大的審查。也許是因爲我被困在2.0的土地上,但是不需要「回報」? – 2010-01-05 01:52:37