BinaryReader 与 byte[]+shifts

BinaryReader vs byte[]+shifts

我一定是误解了 BinaryReader 在做什么。为什么这些输出不同?

{
    var data = File.ReadAllBytes(testFile);
    var pos = 0;
    var read8 = new Func<uint>(() => data[pos++]);
    var read32 = new Func<uint>(() => (read8() << 24) | (read8() << 16) | (read8() << 8) | read8());

    Console.WriteLine(read32());
}

using (var reader = new BinaryReader(File.Open(testFile, FileMode.Open)))
{
    Console.WriteLine(reader.ReadUInt32());
}

Endiannes.

使用:

var read32 = new Func<uint>(() => (read8() | (read8() << 8) | (read8() << 16) | read8() << 24));

附带说明一下,请不要编写带有此类副作用的代码。
因为 the order of evaluation is guaranteed,你在这里逃脱了他们,但仍然请不要。