c# – 我应该投射在我的lambda还是投射IEnumerable?
发布时间:2020-12-15 06:29:03 所属栏目:百科 来源:网络整理
导读:在我的项目中,我有一个实现IMyClass的MyClass.我需要通过转换其他项目的列表来返回IMyClass列表.为了简单起见,假设我可以通过将另一个项目传递到其构造函数(即新的MyClass(item))中来创建MyClass. 考虑以下两行(据我所知)产生相同的结果: var option1 = ite
在我的项目中,我有一个实现IMyClass的MyClass.我需要通过转换其他项目的列表来返回IMyClass列表.为了简单起见,假设我可以通过将另一个项目传递到其构造函数(即新的MyClass(item))中来创建MyClass.
考虑以下两行(据我所知)产生相同的结果: 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?或者我可能比较两个愚蠢的想法,当有一个更智能的第三个,我完全失踪? 解决方法
我会去选择3:
var option3 = items.Select<Foo,IMyClass>(item => new MyClass(item)) .ToList() 或者,不要使用,只能正常投掷: var option4 = items.Select(item => (IMyClass) new MyClass(item)) .ToList() 这两个都比使用Cast更清晰. 呵呵,和.NET 4(由于协方差)的C#4,你可以在ToList调用中放一个类型参数: var option5 = items.Select(item => new MyClass(item)) .ToList<IMyClass>() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |