将数组从可空类型转换为相同类型的不可空类型

本文关键字:同类型 类型 类型转换 数组 | 更新日期: 2023-09-27 18:05:26

我想将一个Nullable(Of Byte)()数组(又名byte?[])转换为一个相同类型的非空数组,即从byte?[]byte[]

我正在寻找更简单,更容易,更快的通用解决方案,在c#或VB.NET。我发现这个泛型函数可以在可空类型之间转换,但我找不到一种方法来适应转换逻辑,从可空类型转换为非可空类型。

这是一个代码示例,我觉得有必要执行这种转换:

byte?[] data = {1, 0, 18, 22, 255};
string hex = BitConverter.ToString(data).Replace("-", ", ");

将数组从可空类型转换为相同类型的不可空类型

要将一种类型的数组转换为另一种类型的数组,请使用array。ConvertAll方法:

byte?[] data = { 1, 0, 18, 22, 255 };
byte[] result = Array.ConvertAll(data, x => x ?? 0);

这比使用LINQ更简单、更容易、更快。

这个方法必须假设如何处理空值。对于这个解,它被映射到default(byte) = 0,以使输入和输出具有相同的长度。

byte?[] data = {1, 0, 18, 22, 255, null};
var byteArray = data.Select(
                 b => b ?? default(byte)).ToArray();

找到这个寻找线程自己的方式。我最终使用.OfType(...)来过滤类型。

int?[] data = { 1, null, 18, 22, 255 };
var result = data.OfType<int>();
Console.WriteLine(string.Join(",", result)); // 1,18,22,255

这段代码将返回一个非空数组。

 Dim arr() As Nullable(Of Byte)
 dim nonNullableArray = arr.Select(Function(item) item.Value).ToArray()