如果 BIGENDIAN 在编译时未解析,为什么它是一个指令?

Why is BIGENDIAN a directive if it's not resolved at compile-time?

请原谅措辞不佳,但我找不到更好的解释方式。

根据我的理解,C# 是一种 WORA 语言 - 您可以在一台机器上编写它并在另一台机器上部署它,因为 MSIL 直到应用程序实际 运行.

那为什么定义BitConverter.IsLittleEndian like so:

#if BIGENDIAN
    public static readonly bool IsLittleEndian /* = false*/;
#else
    public static readonly bool IsLittleEndian = true;
#endif

BIGENDIAN 这里是一个预处理器指令,这意味着它是在编译时解析的。所以如果开发者的机器是little endian,而target使用big endian,会不会IsLittleEndian在目标机器上还是报true

不,它会按预期工作。它会工作的原因是因为安装在目标系统上的 .NET 运行时对于该目标系统是 built/compiled,所以它是 BitConverter.IsLittleEndian 属性 将 return false.您的代码只是引用 属性,因此直到运行时才确定。