在我的項目中,我有一個MyClass
,它實現了IMyClass
。我需要通過轉換其他項目列表來返回IMyClass
的列表。爲了簡單起見,假設我可以創建一個MyClass
,只需將另一個項目傳遞給它的構造函數即new MyClass(item)
即可。我應該投我的lambda或投IEnumerable?
考慮以下兩行,其中(據我所知)產生相同的結果:
var option1 = items.Select(item => new MyClass(item)).Cast<IMyClass>().ToList()
var option2 = items.Select(item => new MyClass(item) as IMyClass).ToList()
這在我看來,選項1將需要雙重枚舉,一旦投中的所有項目到我的界面和一次生成列表。如果我是對的,那麼選項#2會更聰明。然而,我已經從來沒有看到使用類似選項#2的任何代碼,並且我傾向於認爲我不夠聰明,想出其他C#社區沒有的聰明之處。
在附註中,我認爲選項#2更美觀,但這只是我。
我的問題是:是我的選擇#2一個更好的想法,就像我認爲它是?是否有任何遺漏或其他原因,爲什麼我想堅持選項#1?或者我可能比較兩個愚蠢的想法,當有一個更聰明的第三個我完全失蹤?
不要忘記枚舉數是懶惰和可組合的!選項1不會導致它被枚舉兩次...... – 2013-03-01 17:20:22
如果'MyClass'實現'IMyClass',爲什麼需要投射? – 2013-03-01 17:21:57
你知道你總是可以在沒有推理的情況下拼出類型嗎?也就是,'var result = items.Select(x => new MyClass(x))。ToList();'這將返回'IEnumerable ':) –
2013-03-01 17:23:12