如何在不循环元素的情况下将int array
转换为nullable int array
?
project.Suppliers = project.ProjectSuppliers.Select(proj => proj.ProjectSupplier).ToArray();
在上面的代码中我试图将project.ProjectSuppliers.Select(proj => proj.ProjectSupplier).ToArray();
分配给可空数组project.Suppliers
,但我不能因为它是可空的,所以最好的方法是在没有循环的情况下执行此操作元素一个接一个。
答案 0 :(得分:9)
两个选项:
在Select语句中转换项目:
Cast<>()
使用project.Suppliers = project.ProjectSuppliers
.Select(proj => proj.ProjectSupplier)
.Cast<int?>()
.ToArray();
:
Cast<>()
使用LINQ to Objects时,第一个选项可能会有稍微好一点的性能,并且可能会有更少的惊喜。 (某些类型在代码中使用重载运算符进行显式强制转换,但IEnumerable<>
将为同一转换抛出异常,因为它的内部代码在编译时不知道这些类型是什么。)
当你有一个预先组合的IQueryable<>
或Select()
并且你不想为此目的创建一个完整的for
语句时,第二个选项更简洁。
我还应该注意,当你使用LINQ to Objects时,这两个都会迭代给定的集合。您无法在C#中将一种类型的数组转换为另一种类型的数组,因为在运行时,每个数组实例都知道它所持有的对象类型以及每个对象需要多少空间。这些方法只是为您提供了一个很好的可链接语法,而不需要{{1}}循环。