首页 > 解决方案 > 将类型 T(byte?[]) 转换为类型 byte[]

问题描述

这是我当前的代码

returnString = System.Text.Encoding.UTF8.GetString((byte[])Convert.ChangeType((input_Value as byte?[]), typeof(byte[])));

我已经尽一切可能试图让这个 T 转换为 byte[] 但由于 T 最初是一个字节?[],转换为 byte[] 会导致值变为 null 阻止我转换为 utf8 格式。

标签: c#generics

解决方案


您不能无条件直接byte?转换为。byte您应该确定如何null转换byte价值的主要内容。例如,nullinbyte?将转换为0. 因此,您可以使用 LINQSelect将序列的每个元素投影到新形式中:

byte?[] input_Value = ...;
byte[] target = input_Value.Select(b => b.GetValueOrDefault()).ToArray();
var returnString = System.Text.Encoding.UTF8.GetString(target);

GetValueOrDefault()检索当前 Nullable 对象的值,或基础类型的默认值。您还可以使用GetValueOrDefault(defaultValue)来定义特定的默认值。


推荐阅读