将数组从可空类型转换为相同类型的不可空类型?
Convert array from nullable type to non-nullable of same type?
我想将 Nullable(Of Byte)()
数组 (a.k.a. byte?[]
) 转换为相同类型的不可空数组,即从 byte?[]
至 byte[]
.
我正在寻找 C# 或 VB.NET 中更简单、更容易、更快的通用解决方案。我发现 this 泛型函数可以在可为 null 的类型之间进行转换,但我找不到一种方法来调整转换逻辑以从可为 null 的类型转换为不可为 null 的类型。
这是一个代码示例,我觉得需要执行这种转换:
byte?[] data = {1, 0, 18, 22, 255};
string hex = BitConverter.ToString(data).Replace("-", ", ");
此代码将 return 一个不可为 null 的数组。
Dim arr() As Nullable(Of Byte)
dim nonNullableArray = arr.Select(Function(item) item.Value).ToArray()
此方法必须假设如何处理空值。对于此解决方案,它被映射到 default(byte) = 0
以使输入和输出具有相同的长度。
byte?[] data = {1, 0, 18, 22, 255, null};
var byteArray = data.Select(
b => b ?? default(byte)).ToArray();
要将一种类型的数组转换为另一种类型的数组,请使用 Array.ConvertAll 方法:
byte?[] data = { 1, 0, 18, 22, 255 };
byte[] result = Array.ConvertAll(data, x => x ?? 0);
这比使用 LINQ 更简单、更容易、更快。
我自己找到了这个寻找方法的线程。我最终使用 .OfType(...)
来过滤类型。
int?[] data = { 1, null, 18, 22, 255 };
var result = data.OfType<int>();
Console.WriteLine(string.Join(",", result)); // 1,18,22,255
我想将 Nullable(Of Byte)()
数组 (a.k.a. byte?[]
) 转换为相同类型的不可空数组,即从 byte?[]
至 byte[]
.
我正在寻找 C# 或 VB.NET 中更简单、更容易、更快的通用解决方案。我发现 this 泛型函数可以在可为 null 的类型之间进行转换,但我找不到一种方法来调整转换逻辑以从可为 null 的类型转换为不可为 null 的类型。
这是一个代码示例,我觉得需要执行这种转换:
byte?[] data = {1, 0, 18, 22, 255};
string hex = BitConverter.ToString(data).Replace("-", ", ");
此代码将 return 一个不可为 null 的数组。
Dim arr() As Nullable(Of Byte)
dim nonNullableArray = arr.Select(Function(item) item.Value).ToArray()
此方法必须假设如何处理空值。对于此解决方案,它被映射到 default(byte) = 0
以使输入和输出具有相同的长度。
byte?[] data = {1, 0, 18, 22, 255, null};
var byteArray = data.Select(
b => b ?? default(byte)).ToArray();
要将一种类型的数组转换为另一种类型的数组,请使用 Array.ConvertAll 方法:
byte?[] data = { 1, 0, 18, 22, 255 };
byte[] result = Array.ConvertAll(data, x => x ?? 0);
这比使用 LINQ 更简单、更容易、更快。
我自己找到了这个寻找方法的线程。我最终使用 .OfType(...)
来过滤类型。
int?[] data = { 1, null, 18, 22, 255 };
var result = data.OfType<int>();
Console.WriteLine(string.Join(",", result)); // 1,18,22,255