Каковы варианты использования IsLittleEndian в классе BitConverter?

Я был так счастлив, когда обнаружил поле IsLittleEndian в BitConverter . Я подумал, конечно, что он должен быть там, и я смогу указать любой порядок байтов, который мне нравится. Что ж, мое счастье длилось недолго. Потратил некоторое время, пока не обнаружил, что нет возможности установить поле. Это поле только для чтения , и только в статическом конструкторе установлено значение true :

static BitConverter()
{
    IsLittleEndian = true;
}

Забавно, что это поле действительно используется в коде. Например, реализация метода ToInt32 выглядит так:

if (IsLittleEndian)
{
     return (((numRef[0] | (numRef[1] << 8)) | (numRef[2] << 0x10)) | (numRef[3] << 0x18));
}
return ((((numRef[0] << 0x18) | (numRef[1] << 0x10)) | (numRef[2] << 8)) | numRef[3]);

Похоже, что ToInt32 отлично справляется как с малым, так и с большим порядком байтов.

Мой вопрос: как это произошло это очень полезный фрагмент кода, который уже реализован и находится в FCL, но его нельзя использовать (если, конечно, вы не начнете возиться с отражением)? Это просто потому, что некоторые разработчики не уложились в срок и оставили работу наполовину? Даже если так, почему код недоступен, а поле есть? Я надеюсь, что для этого есть веская причина.

Я хочу пояснить. Мне не нужно решение о том, как обрабатывать значения с прямым порядком байтов. У меня есть решение. Решение фактически показано в моем вопросе.

8
задан Alex Aza 22 June 2011 в 06:02
поделиться