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

时间:2016-09-03 19:04:33

标签: c# .net vb.net types nullable

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

我正在寻找更简单,更简单,更快速的通用解决方案,在C#或VB.NET中。我发现this泛型函数可以在可空类型之间进行转换,但是我找不到一种方法来调整转换逻辑以从可空类型转换为非可空类型。

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

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

4 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:2)

自己找到了一种看起来不错的线程。我最终使用.OfType(...)来过滤类型。

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

答案 3 :(得分:1)

此代码将返回一组非空格。

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