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

7
我想把一个Nullable(Of Byte)()数组(也称为byte?[])转换为同类型的非空数组,即从byte?[]byte[]。 我正在寻找更简单、更易用、更快速的通用解决方案,可用C#或VB.NET编写。我发现了这个通用函数来在可为空类型之间进行转换,但我找不到一种方法来调整转换逻辑以将可为空类型转换为非可为空类型。
以下是需要执行此类转换的代码示例:
byte?[] data = {1, 0, 18, 22, 255};
string hex = BitConverter.ToString(data).Replace("-", ", ");

3
byte[] data2 = data.Where(x => x.HasValue).Select(x => x.Value).ToArray(); 的翻译是:将具有值的元素筛选出来并选取其值,然后转换成字节数组。 - L.B
我没有注意到LINQ方法,谢谢。 - ElektroStudios
4个回答

20

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

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

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


6

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

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

4

我在寻找一种方法时发现了这个线程。最终我使用.OfType(...)来筛选类型。

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

1
这段代码将返回一个非空数组。
 Dim arr() As Nullable(Of Byte)
 dim nonNullableArray = arr.Select(Function(item) item.Value).ToArray()

4
如果该项为空怎么办? - Olivier Jacot-Descombes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接