将数组从可空类型转换为相同类型的不可空类型
本文关键字:同类型 类型 类型转换 数组 | 更新日期: 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()