当我发现BitConverter
中的IsLittleEndian
字段时,我感到非常高兴。我认为它应该存在,并且我应该能够指定任何字节序。然而,我的快乐并没有持续多久。花了一些时间才发现无法设置该字段。
该字段是readonly
的,并且仅在静态构造函数中设置为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 中实现并存在,但是没有办法使用它(除非你开始使用反射)?这只是因为一些开发人员没有达到最后期限而留下了未完成的工作吗?即使是这样,为什么代码不可用,但字段却可以?
我希望这背后有一个很好的理由。
我想让自己清楚。我不需要处理大端值的解决方案。我已经有了一个解决方案。实际上,我的问题中已经展示了解决方案。