Как получить код типа массива байт?

#c#

#c#

Вопрос:

Мне нужно указать тип неизвестной переменной. Type.GetTypeCode() кажется достаточно хорошим для моих целей, но в случае byte[] с ним не обеспечивается желаемый результат.

Вот упрощенный код для моей проблемы:

 var bytes = new byte[10];
var typeCode = Type.GetTypeCode(bytes.GetType());

// Actual result: typeCode equals Object
// Desired result (pseudocode): "array of TypeCode.Byte"
  

Ответ №1:

TypeCode это перечисление, и, учитывая, что нет элемента enum, представляющего «массив байтов», вы получите TypeCode.Object , потому что:

Объект
Общий тип, представляющий любую ссылку или тип значения, явно не представленный другим кодом типа.

Вы, вероятно, ищете Type.GetElementType() , поскольку это возвращает:

Тип объекта, охватываемого или на который ссылается текущий массив […]

Используя этот возвращаемый тип, вы, в свою очередь, можете вызвать Type.GetTypeCode() :

 var byteArray = new byte[0];

Type arrayType = byteArray.GetType();
Type elementType =  arrayType.GetElementType();
TypeCode elementTypeCode = Type.GetTypeCode(elementType);
  

Вот, elementTypeCode будет TypeCode.Byte .

Ответ №2:

 var typeCodeName = bytes.GetType().Name;//Byte[]
var typeCodeFName = bytes.GetType().FullName;//System.Byte[]
  

Вы можете вернуть Byte[], если вы используете имя GetType . Если это то, что вы хотите.