Преобразовать байтовый массив в значение универсального типа в C # - PullRequest
0 голосов
/ 06 октября 2019

Я хотел бы иметь вспомогательный метод для преобразования байтового массива в значение универсального типа:

public static T BytesToValue<T>(byte[] bytes)
{
    int pos = 0;
    T result = default;
    foreach (byte b in bytes)
    {
        //Cannot convert from type byte to T error here
        result |= ((T)b) << pos;
        pos += 8;
    }
    return result;
}

Проблема заключается в том, что компилятор выдает ошибку.

Метод в основном будетиспользуется для получения значений типа int и long, а производительность очень важна.

Как это можно исправить?

1 Ответ

0 голосов
/ 06 октября 2019

Битовые операторы не могут использоваться с параметрами универсального типа.

Даже это простое приведение не компилируется:

result = (T)b;

Но мы можем написать это, которое компилируется (полезно для другого случая):

result = (T)Convert.ChangeType(b, typeof(T));

Так что это некомпилировать:

result |= ( (T)Convert.ChangeType(b, typeof(T)) ) << pos;
...