加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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>()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读