我有兩行代碼,一個是選擇不上IQueryable的工作,但確實在IList的
AllItems().Where(c => c.Id== id)
.Select(d => new Quality(d.QualityType)).ToList();
,另一個
AllItems().Where(c => c.Id== id).ToList()
.Select(d => new Quality(d.QualityType)).ToList();
唯一的區別就是在第二條語句ToList()
在Where
聲明後調用。第二個聲明很好。
在第一個語句中,默認的無參數構造函數被命中,而不是帶有參數的構造函數。因此該列表已創建,但列表中的對象已使用默認值進行初始化,而不是使用d.QualityType進行初始化。
你可以看到有問題的文件的完整源在(方法:GetBestQualityInHistory)
https://github.com/kayone/NzbDrone/blob/master/NzbDrone.Core/Providers/HistoryProvider.cs
**編輯:經過進一步調查,這似乎是一個亞音速的bug,如果最後ToList
被替換爲OrderBy
亞音速拋出The construtor 'Void .ctor(NzbDrone.Core.Repository.Quality.QualityTypes, Boolean)' is not supported
。
你在這裏調用了'ToList' * both * cases,但是在第二種情況下,你調用它*兩次*。爲什麼? – 2011-06-05 19:28:25
對不起,這只是錯誤複製過去 – 2011-06-05 19:29:02
AllItems是什麼類型?它只是一個內存列表,或者它是通過例如持久性框架提供給您的東西嗎? 可能是相關的,因爲如果不使用ToList,持久性框架將處理呼叫。據我所知.net在tolist後處理它(因爲它是一個列表之後) –
thekip
2011-06-05 19:31:44