将类型T(byte?[])强制转换为类型byte[]



这是我拥有的当前代码

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

我已经尽了一切可能将这个T转换为byte[]但既然T最初是一个字节?[],强制转换为byte[]会导致值变为null阻止我转换为utf8格式。

您不能在没有条件的情况下直接将byte?强制转换为byte。您应该确定null将如何转换为byte值。例如,byte?中的null将被转换为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)来定义特定的默认值。

最新更新