Я хотел бы преобразовать массив Nullable(Of Byte)() (он же byte?[]) в массив того же типа, не допускающий значения NULL, то есть из byte?[] в byte[].

Я ищу более простое, легкое и быстрое универсальное решение на C # или VB.NET. Я нашел эту общую функцию для преобразования между типами, допускающими значение NULL, но я не могу найти способ адаптировать логику преобразования к преобразовать из типа, допускающего значение NULL, в тип, не допускающий значения NULL.

Это пример кода, для которого я чувствую необходимость выполнить такое преобразование:

byte?[] data = {1, 0, 18, 22, 255};
string hex = BitConverter.ToString(data).Replace("-", ", ");
5
ElektroStudios 3 Сен 2016 в 22:04

4 ответа

Лучший ответ

Чтобы преобразовать массив одного типа в массив другого типа, используйте Array.ConvertAll:

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

Это проще, проще и быстрее, чем использование LINQ.

15
Michael Liu 3 Сен 2016 в 19:31

Этот код вернет массив значений, не допускающих значения NULL.

 Dim arr() As Nullable(Of Byte)
 dim nonNullableArray = arr.Select(Function(item) item.Value).ToArray()
1
FloatingKiwi 3 Сен 2016 в 19:08

Этот метод должен делать предположение о том, как обрабатывать нулевое значение. Для этого решения он отображается на default(byte) = 0, чтобы входные и выходные данные имели одинаковую длину.

byte?[] data = {1, 0, 18, 22, 255, null};
var byteArray = data.Select(
                 b => b ?? default(byte)).ToArray();
6
Ralf Bönning 3 Сен 2016 в 19:15