c# – 我应该投射在我的lambda还是投射IEnumerable?

前端之家收集整理的这篇文章主要介绍了c# – 我应该投射在我的lambda还是投射IEnumerable?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的项目中,我有一个实现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>()

猜你在找的C#相关文章