c# - 如何在不遍历元素的情况下将 int 数组转换为可为 null 的 int 数组?

标签 c# arrays nullable

如何在不遍历元素的情况下将 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/

相关文章:

c# - 将字典传递给 View Asp.net MVC

JavaScript:阻止 Array.push()

java - 如何在java中初始化(int,string)的有序对

c# - 具有泛型的可空原语

c# - 对您来说它看起来像 C# 错误吗?

c# - 基于子实体的属性构建 OrderBy Lambda 表达式

c# - 高效创建包含大量项目的 List<MyObject>

c# - 如何在句子文本中搜索单词 [C#]

javascript - 使用 groupBy 对数组进行分组

c# - 返回未知类型的空值