在我的项目中,我有一个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