如何在不遍历元素的情况下将 int array
转换为 nullable int array
?
project.Suppliers = project.ProjectSuppliers.Select(proj => proj.ProjectSupplier).ToArray();
在上面的代码中,我试图将 project.ProjectSuppliers.Select(proj => proj.ProjectSupplier).ToArray();
分配给可空数组 project.Suppliers
但我不能,因为它可以为空,所以最好的方法是什么而不逐一循环元素。
最佳答案
两种选择:
在您的 Select 语句中转换项目:
project.Suppliers = project.ProjectSuppliers
.Select(proj => (int?)proj.ProjectSupplier)
.ToArray();
使用 Cast<>()
:
project.Suppliers = project.ProjectSuppliers
.Select(proj => proj.ProjectSupplier)
.Cast<int?>()
.ToArray();
当使用 LINQ to Objects 时,第一个选项的性能可能会稍好一些,而且它的意外情况可能会更少。 (某些类型在代码中使用重载运算符进行显式转换,但 Cast<>()
会为相同的转换抛出异常,因为其内部代码在编译时不知道这些类型是什么。)
当你有一个预组合的 IEnumerable<>
时,第二个选项更简洁。或 IQueryable<>
而且你不想创建一个整体 Select()
声明仅用于此目的。
我还应该注意,当您使用 LINQ to Objects 时,这两者都将遍历给定的集合。您不能在 C# 中将一种类型的数组转换为另一种类型的数组,因为在运行时每个数组实例都知道它持有什么类型的对象以及每个对象将需要多少空间。这些方法只是给你一个很好的可链接语法,而不是需要 for
循环。
关于c# - 如何在不遍历元素的情况下将 int 数组转换为可为 null 的 int 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32728003/