Кастинг избыточен или нет - PullRequest
       0

Кастинг избыточен или нет

0 голосов
/ 02 октября 2018

Вот моя оригинальная функция

 private static Int32 getInt(byte[] Data, char Endianness)
        {
            if (Data.Length > 3)
            {
                switch (Endianness)
                {
                    case 'l':
                        return ((Int32)(Data[3]) << 24) + ((Int32)(Data[2]) << 16) + ((Int32)(Data[1]) << 8) + (Int32)(Data[0]);
                    case 'b':
                        return ((Int32)(Data[0]) << 24) + ((Int32)(Data[1]) << 16) + ((Int32)(Data[2]) << 8) + (Int32)(Data[3]);
                    default:
                        throw new ArgumentException("Wrong endianness type", "Endianness types are 'l' or 'b'");
                }
            }
            else
            {
                throw new ArgumentException("NVM data corruption", "Failed to parse NVM data");
            }
        }

Я использую Resharper, и он предложил удалить приведение к Int32, так как оно избыточно.

, поэтому мы получаем этот код в качестве вывода

 private static int getInt(byte[] Data, char Endianness)
    {
        if (Data.Length > 3)
        {
            switch (Endianness)
            {
                case 'l':
                    return (Data[3] << 24) + (Data[2] << 16) + (Data[1] << 8) + Data[0];
                case 'b':
                    return (Data[0] << 24) + (Data[1] << 16) + (Data[2] << 8) + Data[3];
                default:
                    throw new ArgumentException("Wrong endianness type", "Endianness types are 'l' or 'b'");
            }
        }
        throw new ArgumentException("NVM data corruption", "Failed to parse NVM data");
    }

в коде, который вы видите, я смещаю Data[2] << 16, что число может переполниться из исходного байта, если я удалил приведение к Int32, рискну ли я здесь каким-то образом обрезать до байта?

Не могли бы вы объяснить, что здесь делает препроцессор / компилятор C #?

Спасибо

1 Ответ

0 голосов
/ 02 октября 2018

Приведение является избыточным, потому что компилятор автоматически переводит Data[2] в целое число при использовании оператора left-shift, и результатом этой операции также будет целое число.Таким образом, данные не будут потеряны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...